Systemd python 腳本不會記錄(緩衝區原因)?

Systemd python 腳本不會記錄(緩衝區原因)?

雖然問題暴露在這裡看起來非常相似,所提供的解決方案都不起作用。情境 :

  • Raspberry Pi 零 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

該服務在啟動時在預期的段(與WantsWantedBy部分相關)上正確加載。但它不會在我提供的日誌文件中記錄任何內容。您會注意到Environment強制輸入和在 Python 可執行呼叫上傳遞的參數PYTHONUNBUFFERED相同的事情。-u這完全沒有效果。

如果我在 CLI 上啟動完全相同的執行行,腳本將運行並記錄。透過服務定義,完全沒有日誌。

附註:

  • 如果我檢查journalctl輸出,我會找到我的日誌行
  • logrotatelog2ram設定在日誌檔案/目錄中

我最終添加了命令行,/etc/rc.local後面跟著一個&符號。根據我的說法,這不是一個可行的方案,因為我想以關於其運行的系統的最佳方式註冊該服務。

感謝您的回覆與啟發。

答案1

您不應該嘗試以這種方式使用 shell 重定向。它不起作用,因為 systemd 不是 shell。相反,指定StandardOutput=StandardError=如果您希望將它們導向期刊以外的其他地方,請明確指定。

相關內容