このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】コマンドの出力をログに記録する:systemd-catコマンド

systemd-catコマンドの概要

 systemd-catコマンドは、指定されたコマンドの出力をsystemd-journaldによって管理されるジャーナルログに記録するためのツールです。このコマンドを使用することで、スクリプトやコマンドの出力を簡単にシステムログに記録することができます。

【構文】
systemd-cat コマンド

loggerコマンドとsystemd-catコマンドの違い

特徴loggerコマンドsystemd-catコマンド
使用目的任意のメッセージをシステムログに追加する。コマンドの出力をシステムログに記録する。
基本構文logger [オプション] メッセージsystemd-cat コマンド
使い方の柔軟性手動でメッセージを入力する必要がある。コマンドの出力をそのままログに記録する。
主な使用例スクリプトや手動で特定のメッセージをログに記録する。スクリプトやコマンドの出力を自動的にログに記録する。
設定可能なオプションファシリティ、プライオリティ、タグなど少ない(デフォルト設定で動作)
出力の扱いメッセージ単位で扱う。コマンドの標準出力および標準エラー出力全体を扱う。
loggerコマンドとsystemd-catコマンドの違い

コマンドの使用例と解説と確認方法

1.コマンドの出力をログに記録する。

・「systemd-cat echo "This is a test message."」コマンドを実行します。

echoコマンドの出力をsystemd-journaldに記録します。

user01@ubuntu-vm:~$ systemd-cat echo "This is a test message."

【確認方法】

・「journalctl -e」コマンドを実行します。

ログファイルの最後に移動して表示します。

user01@ubuntu-vm:~$ journalctl -e
(省略)
 7月 22 00:13:52 ubuntu-vm pkexec[15551]: pam_unix(polkit-1:session): sessi>
 7月 22 00:13:52 ubuntu-vm pkexec[15551]: user01: Executing command [USER=r>
 7月 22 00:13:52 ubuntu-vm update-notifier.desktop[15557]: /var/cache/apt/a>
 7月 22 00:13:58 ubuntu-vm echo[15874]: This is a test message.

・「q」キーを押して終了させます。

2.スクリプトの出力をログに記録する。

・「systemd-cat bash -c 'for i in {1..5}; do echo "Logging $i"; sleep 1; done'」コマンドを実行します。

スクリプトの出力(カウントとログメッセージ)をsystemd-journaldに記録します。

user01@ubuntu-vm:~$ systemd-cat bash -c 'for i in {1..5}; do echo "Logging $i"; sleep 1; done'

【確認方法】

・「journalctl -e」コマンドを実行します。

ログファイルの最後に移動して表示します。

user01@ubuntu-vm:~$ journalctl -e
(省略) 
7月 22 00:17:14 ubuntu-vm bash[29175]: Logging 1
7月 22 00:17:15 ubuntu-vm systemd[1]: Starting Cleanup of Temporary Direct>
7月 22 00:17:15 ubuntu-vm systemd[1]: systemd-tmpfiles-clean.service: Deac>
7月 22 00:17:15 ubuntu-vm systemd[1]: Finished Cleanup of Temporary Direct>
7月 22 00:17:15 ubuntu-vm bash[29175]: Logging 2
7月 22 00:17:16 ubuntu-vm bash[29175]: Logging 3
7月 22 00:17:17 ubuntu-vm bash[29175]: Logging 4
7月 22 00:17:18 ubuntu-vm bash[29175]: Logging 5
(省略)

・「q」キーを押して終了させます。

3.エラーメッセージをログに記録する。

・「systemd-cat ls /nonexistent」コマンドを実行します。

 存在しないディレクトリをリストしようとするlsコマンドのエラーメッセージをsystemd-journaldに記録します。

user01@ubuntu-vm:~$ systemd-cat ls /nonexisten

【確認方法】

・「journalctl -e」コマンドを実行します。

ログファイルの最後に移動して表示します。

user01@ubuntu-vm:~$ journalctl -e
(省略) 
 7月 22 00:19:15 ubuntu-vm dbus-daemon[498]: Unknown group "power" in message bus configuration file
 7月 22 00:19:15 ubuntu-vm dbus-daemon[498]: [system] Reloaded configuration
 7月 22 00:19:18 ubuntu-vm ls[35615]: ls: '/nonexistent' にアクセスできません: そのようなファイルやディレクトリはありません
(省略)

・「q」キーを押して終了させます。

まとめ

 systemd-catコマンドは、コマンドやスクリプトの出力をsystemd-journaldによって管理されるログに記録するための便利なツールです。loggerコマンドとの違いは、systemd-catがコマンドの出力全体をログに記録するのに対し、loggerは任意のメッセージを手動でログに追加する点です。systemd-catを使用することで、ログ管理が容易になり、スクリプトのデバッグや監視が効果的に行えます。