
雖然問題暴露在這裡看起來非常相似,所提供的解決方案都不起作用。情境 :
- 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
該服務在啟動時在預期的段(與Wants
和WantedBy
部分相關)上正確加載。但它不會在我提供的日誌文件中記錄任何內容。您會注意到Environment
強制輸入和在 Python 可執行呼叫上傳遞的參數PYTHONUNBUFFERED
相同的事情。-u
這完全沒有效果。
如果我在 CLI 上啟動完全相同的執行行,腳本將運行並記錄。透過服務定義,完全沒有日誌。
附註:
- 如果我檢查
journalctl
輸出,我會找到我的日誌行 logrotate
並log2ram
設定在日誌檔案/目錄中
我最終添加了命令行,/etc/rc.local
後面跟著一個&符號。根據我的說法,這不是一個可行的方案,因為我想以關於其運行的系統的最佳方式註冊該服務。
感謝您的回覆與啟發。
答案1
您不應該嘗試以這種方式使用 shell 重定向。它不起作用,因為 systemd 不是 shell。相反,指定StandardOutput=
和StandardError=
如果您希望將它們導向期刊以外的其他地方,請明確指定。