サービスのログが 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 stdouthello 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