Systemd python スクリプトがログに記録されない (バッファが原因)?

Systemd python スクリプトがログに記録されない (バッファが原因)?

問題はここで露出非常に似ているようですが、提供された解決策はどれも機能しません。コンテキスト:

  • Raspberry Pi Zero W、Raspbian Lite (2020-08-20)
  • Python3スクリプトをサービスとして登録し、バックグラウンドで実行したい

私はこれを systemd で動作させたかったのですが、次の構成で動作しました。

application.serviceにあり/etc/systemd/system/application.service

[Unit]
Description=application
After=multi-user.target


[Service]
User=custom_user
Type=idle
TimeoutSec=0
PIDFile=/run/application.pid
ExecStart=/usr/bin/python3 -u /path/to/application.py >> /path/to/log.log 2>&1
KillMode=control-group
Environment="PYTHONUNBUFFERED=1"

Restart=always
RestartSec=3s

[Install]
WantedBy=multi-user.target

このサービスは、起動時に、予期されるセグメント (およびWantsセクションWantedByに関連) で正しく読み込まれます。しかし、私が提供したログファイルには何も記録されませんEnvironment. force へのエントリPYTHONUNBUFFEREDと、Python 実行可能ファイルの呼び出しで渡される引数について同じことが起こっていることに気付きました-u。これはまったく効果がありません。

CLI でまったく同じ exec 行を起動すると、スクリプトが実行され、ログに記録されます。サービス定義では、ログはまったく記録されません。

補足事項:

  • 出力をチェックするとjournalctl、ログ行が見つかります
  • logrotatelog2ramログファイル/ディレクトリに設定されます

結局、コマンドラインにアンパサンドを追加してしまいました/etc/rc.local。このサービスを実行しているシステムに関して、可能な限り最善の方法で登録したいので、これは私にとってはうまくいきません。

ご返信とご指摘ありがとうございます。

答え1

このような方法でシェルリダイレクトを使用しないでください。systemdはシェルではないため、動作しません。代わりに、次のように指定します。StandardOutput=そしてStandardError=ジャーナル以外の場所にリダイレクトしたい場合は明示的に指定します。

関連情報