GNU/Linux >> Linux の 問題 >  >> Linux

systemd サービスの出力をファイルにリダイレクトする方法

新しい systemd の新しいディストリビューションがある場合 (systemd バージョン 236 以降)、StandardOutput の値を設定できます。 または StandardError file:YOUR_ABSPATH_FILENAMEまで .

長い話:

systemd の新しいバージョンでは StandardOutput の値を設定できる比較的新しいオプションがあります (github リクエストは 2016 っぽいもので、拡張機能は 2017 っぽいものでマージ/クローズされています)。 または StandardError file:YOUR_ABSPATH_FILENAMEまで . file:path オプションは最新の systemd.exec に記載されています

この新機能は比較的新しいため、centos-7 (またはそれ以前の centos) などの古いディストリビューションでは利用できません。


この問題を解決するもっと洗練された方法があると思います:stdout/stderr を識別子とともに syslog に送信し、syslog マネージャーにその出力をプログラム名で分割するように指示します。

systemd サービス ユニット ファイルで次のプロパティを使用します。

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote

次に、ディストリビューションが rsyslog を使用して syslog を管理していると仮定して、/etc/rsyslog.d/<new_file>.conf にファイルを作成します。 次の内容で:

if $programname == '<your program identifier>' then /path/to/log/file.log
& stop

ここで、ログ ファイルを syslog で書き込み可能にします:

# ls -alth /var/log/syslog 
-rw-r----- 1 syslog adm 439K Mar  5 19:35 /var/log/syslog
# chown syslog:adm /path/to/log/file.log

rsyslog を再起動します (sudo systemctl restart rsyslog )そしてお楽しみください!プログラムの stdout/stderr は、journalctl (sudo journalctl -u <your program identifier>) を通じて引き続き利用できます。 ) ですが、選択したファイルでも利用できます。

archive.org からのソース


Linux
  1. プログラムの出力をZipファイルにリダイレクトする方法は??

  2. リダイレクトとパイプ出力?

  3. すでに実行中のプロセスの出力をリダイレクトする方法

  1. time コマンドの出力を Linux のファイルにリダイレクトする方法は?

  2. systemd サービスを停止する方法

  3. systemd サービス ファイルで、USB の準備ができた後はどうすればいいですか?

  1. systemdを使用してスタートアップを管理する

  2. Linuxでコマンド出力をファイルに保存する方法

  3. systemd サービス ログをファイルにリダイレクトする