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

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

リダイレクト

StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log

ここに記載されているとおり:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

この方法では、サービスが再起動するたびにログ ファイルの内容全体が上書きされることに注意してください。

追加

サービスの再起動間でファイル ログを保持し、ログに記録された新しい行を追加するだけの場合:

# Works only in systemd v240 and newer!
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log

v240 より古い systemd の場合、以下を使用できます:

ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'

exec シェルプログラムが my_binary に置き換えられることを意味します フォークせずにリダイレクトを設定した後のプログラム。したがって、my_binary を実行しても違いはありません。 ExecStart= の直後 .


<ブロック引用>

ExecStart=/usr/bin/nohup …

これは間違っています。それを除く。このサービスは、対話型ログイン セッションでは実行されていません。そもそもハングアップ信号を送信する制御端末やセッション リーダーはありません。

<ブロック引用>

ExecStart=… &

これは間違っています。それを除く。これはシェルスクリプトではありません。 & 特別なシェルのような意味はありません.

StandardOutput=/var/log/flume-ng/log1.log
StandardError=/var/log/flume-ng/log2.log

これらは間違っています。これらは使用しないでください。 systemd すでに送信 サービスユニットでそのような設定を行わなくても、サービスプロセスの標準出力とエラーをそのジャーナルに出力します。

で表示できます
journalctl -e -u flume-ng.service


上書きせずにファイルに記録する場合 (system.d バージョン 240 以降が必要):

StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log

また

StandardOutput=append:/var/log/flume-ng/log.log
StandardError=inherit

Linux
  1. Firefoxのログファイルを見つけますか?

  2. telnet コンソール ログをファイル Linux にリダイレクトする方法

  3. 標準出力のローテーションをログに記録しますか?

  1. strace をファイルにリダイレクトする

  2. ログファイルを作る

  3. ログをクリアする適切な方法はありますか?

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

  2. 自動マウント後、アクセス後にSystemdサービスを実行しますか?

  3. Linux OS サービス「syslog」