2017-04-25 6 views
0

systemdを使ってRaspbian(Jessie)にサービスをセットアップし、起動後に起動させます。リダイレクト>>が機能していないことをRaspbianのsystemdサービスからstdout/stderrを適切にリダイレクトするにはどうすればよいですか?

[Unit] 
After=multi-user.target 

[Service] 
Type=idle 
User=root 
ExecStart=/bin/sh -c "exec /home/pi/sources/mydaemon.py >> /home/pi/mydaemon.log 2>&1" 

[Install] 
WantedBy=multi-user.target 

:デーモンの設定は次のようになります。 StandardOutputStandardErrorのほとんどのオプションを試しましたが、スクリプトの出力を/var/log/daemon.logに出力することはなく、journalctl -u mydaemon.serviceは開始と停止のサービスに関するメッセージのみを表示します。

私は現在、スクリプト内のファイル記述子で面白いことはしていません。私はちょうど私のprint()またはlogging.info()ステートメントを私がそれらを読むことができるどこかに表示したい。何か案は?

(ただ、明確にするために、デーモンはrootとして実行する必要がない。それは私の印刷の問題とは何かを持っているだろうか?)通常

答えて

2

あなただけのサービスを直接実行します(必ずそれが実行ファイルがシェバングを持っています作ります行):

ExecStart=/home/pi/sources/mydaemon.py 

そして、あなたはjournalctl -u mydaemon.serviceでログを読み取ることができるように、systemdにジャーナルにStandardOutput=のデフォルトのリダイレクトを使用しています。

Systemdは、ログのファイル拡張とファイルローテーションをきちんと制御します。

サービスがルートとして実行されることは無関係です。

あなたは上記と任意のログ出力が表示されない場合、また、あなたのサービスに起因する可能性がある近くのログのログ全体を確認してください。際、いくつかの既知の問題がありますので

journalctl 

これが必要ですスクリプトが存在する直前の最後のログ行は、スクリプトに起因していない可能性があります。これは、終了する前に数秒で実行されるスクリプトで特に顕著になります。

+0

これは一部のみを動作しているようです時間のRaspbian Jessieのsystemdやjournalctlに何が問題なのか分かりませんが、ログ記録に問題があると思われます。私のスクリプトのつぶやきなので、いつ起動するのかはわかりますが、スクリプトのprint文は通常ジャーナルには表示されません。 – Eric

+0

あなたの答えと併せて、スクリプト内からこのメソッドを試して、私がより良い運があるかどうかを確認します(明示的にメッセージをジャーナルに送信します)。http://stackoverflow.com/questions/34588421/how-to- log-to-journald-systemd-via-python – Eric

3

メッセージがバッファされないようにするには、-uパラメータを付けてpythonを実行する必要がありました。すぐにジャーナルに追加され、このライン、印刷ラインと

ExecStart=/home/pengman/scripts/mqtt_monitor/venv/bin/python -u home/pengman/scripts/mqtt_monitor/src/mqtt_monitor.py 

(私はvirtualenvの内部で実行していますが、それは問題ではありません)

関連する問題