1. ホーム
  2. logging

[解決済み] start-stop-daemonで起動したプロセスのstdoutを記録するにはどうすればよいですか?

2022-08-05 18:22:58

質問

initスクリプトを使って、簡単なプロセスを実行しています。

start-stop-daemon --start --quiet --chuid $DAEMONUSER    \
    --make-pidfile --pidfile $PIDFILE --background       \
    --exec $DAEMON $DAEMON_ARGS

DAEMONと呼ばれるプロセスは、通常、ログ情報を標準出力に出力します。 私が知る限り、このデータはどこにも保存されていません。

DAEMONの標準出力をどこかのファイルに書き出したい、または追加したいのですが、どうすればよいでしょうか。

私が知っている唯一の解決策は、$DAEMON の代わりにシェルスクリプトを直接呼び出すように start-stop-daemon に指示することです; スクリプトは次に $DAEMON を呼び出し、ログファイルに書き出します。 しかし、これは、デーモン自体を修正するような余分なスクリプトを必要とし、このような一般的なタスクを解決する間違った方法のように思われます。

どのように解決するのですか?

コメントできないので、ypocatさんの回答を拡大します。

start-stop-daemon --start --quiet --chuid $DAEMONUSER    \
 --make-pidfile --pidfile $PIDFILE --background       \
 --startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"

使用方法 exec を使ってデーモンを実行すると、stop が bash の親プロセスだけでなく、子プロセスも正しく停止できるようになります。

を使って --startas の代わりに --exec は、プロセスがその pid によって正しく検出され、start が複数回呼ばれた場合にデーモンの複数のインスタンスを誤って開始しないことを保証します。そうでなければ、start-stop-daemon は /bin/bash プロセスを探し、デーモンを実行している実際の子プロセスを無視します。