start-stop-daemon(8) を使ってデーモンの stdout と stderr をリダイレクトする方法は?

start-stop-daemon(8) を使ってデーモンの stdout と stderr をリダイレクトする方法は?

私はDebian 8 jessieを実行しています。

デーモンのデバッグツールを有効にして、デーモンにデバッグ情報をstdoutおよび/またはstderrに印刷させるようにしました。start-stop-daemon(8)デーモン/lib/lsb/init-functionsのstdoutとstderrが私のデバッグログファイルにリダイレクトされるようにするにはどうすればよいですか/root/log

無効なようです>/root/log 2>&1start-stop-daemon(8)シェルではないので、これが意味があると思います。とにかく、デーモンのstdoutとstderrをどのようにリダイレクトできますか?

[デーモンはですがexim4(8)、私が知る限り、それは私の問題とは何の関係もありません。 LSBは明らかにデーモン管理をSystemdに委任します。これは私が知っているすべてと間接的に関連している可能性があります。 ]

答え1

さまざまな層のシェルスクリプトを介してマジックオプションを渡す試みは、システムLinuxオペレーティングシステムでは完全に間違ったアプローチです。

システムすでに以下のように、「sysv」サービスジェネレータによって自動的に生成されたサービスの標準出力/エラーを記録します。 "sysv"サービスジェネレータは、サービスを呼び出すために1つexim4.service(下のどこか/run/systemd)を作成しました/etc/init.d/exim4

委任は行われません。あなたのrcスクリプトは当初サービスの責任を負いません。彼らは単に便利なプロキシとして実行されます。

したがって、あなたがする必要があるのは、キャプチャされたサービスログの出力を見ることですexim4.service。これは日記であってもよいし、syslog日記に基づく配列の変形であってもよい。

後者の場合は、syslog変形に適したすべての作業を実行してください。前者の場合、systemctl実行するたびにサービスの最新のログエントリが表示されます。

systemctl statusexim4.service
適切な権限(スーパーユーザーまたはsystemd-journalグループのメンバー)が必要です。最後の起動以降、サービスのログエントリを表示することもできます(ログはまだ循環していません)。

Journalctl -u exim4.service -e -b

輸出入銀行は適切なサービス管理を行います。

皮肉なことに、これらすべてのモンスタースクリプトはややrc短い+および+サービスとソケットデバイスに置き換えることができます。exim4-queue.service[email protected]exim4-smtp-relay.socket[email protected]exim4-smtp-submission.socket

また、eximは「フロントエンド」と「デバッグ」/「詳細情報」を誤って与えることに注意してください。これのオプションは-bdf明示的に「デーモン」ではなくバージョンですが、-bdサービス管理ツールがリスニングソケットを処理する接続固有の「ソケット有効」デーモン(追加の読み取りの例に従って)と呼んでいても、人々はとにかく代わり-bsに使用してください-bdf

追加読書

関連情報