サービスのログが journald に収集されるか試す
journald について勉強しています。systemd が起動するサービスの標準出力と標準エラー出力が journald に収集されるか、 テスト用のログを出力するサービスを作り、試してみました。
テスト用のログ出力スクリプト
以下のスクリプトを /home/pi/testsh/test.sh
に配置しました。
10 秒ごとに標準出力と標準エラー出力に書き込みます。
#!/bin/bash while true do sleep 10 echo "hello stdout" echo "hello stderr" >&2 done
ユニットファイルを作る
test.sh
を実行するサービスのユニットファイルを /etc/systemd/system/test.service
に作ります。
参考にさせてもらったサイト: https://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff
$ sudoedit /etc/systemd/system/test.service $ cat /etc/systemd/system/test.service [Unit] Description = test [Service] ExecStart = /home/pi/testsh/test.sh Restart = always Type = simple [Install] WantedBy = multi-user.target
test.service がサービスとして認識されたか確認する
OK ですね。
$ sudo systemctl list-unit-files --type=service | grep test test.service disabled
サービスを起動して、journald のログを確認する
サービス起動前に journalctl | grep hello
で journald のログに hello stdout と hello stderr が無いことを確認します。
$ journalctl | grep hello
サービスを起動します。
$ sudo systemctl start test.service
再度ログを確認すると、ちゃんと出力されています。
$ journalctl | grep hello 4月 04 17:24:28 raspberrypi test.sh[13035]: hello stdout 4月 04 17:24:28 raspberrypi test.sh[13035]: hello stderr 4月 04 17:24:38 raspberrypi test.sh[13035]: hello stdout 4月 04 17:24:38 raspberrypi test.sh[13035]: hello stderr
確認が終わったら、サービスを止めておきます。
$ sudo systemctl stop test.service
systemd-cat
systemd-cat を実行しても journald にログを記録できるみたいです。
参考にさせてもらったサイト: https://serverfault.com/questions/573946/how-can-i-send-a-message-to-the-systemd-journal-from-the-command-line
$ journalctl | grep bowwow $ echo 'bowwow' | systemd-cat $ journalctl | grep bowwow 4月 04 17:54:27 raspberrypi cat[13153]: bowwow