Arch-Linux
oneshot systemd單元和root命令行之間的區別?
我的設置包括一個通過 exim 命令行向本地使用者發送郵件的腳本。這個腳本被稱為 root (現實當然更複雜,但這似乎是一個最小的工作範例)。
/home/jens/send_mail: #!/bin/sh cat /home/jens/testmail | /usr/bin/exim -bm jens
從根 shell 執行此腳本可以正常工作。郵件傳遞沒有問題。
現在我嘗試自動化這個腳本並從 systemd 服務呼叫它:
/etc/systemd/system/send_mail.service: [Unit] Description=Send mail to jens [Service] Type=oneshot ExecStart=/home/jens/send_mail [Install] WantedBy=multi-user.target
執行
systemctl start send_mail.service
不會投遞郵件,而是將其放在 exim 隊列中以便稍後投遞。在我的真實設置中,我發現行閱讀... exim[275968]: 2020-07-16 23:09:40 1jwB8O-0019n4-Lj failed to write to main log: length=91 result=-1 errno=9 (Bad file descriptor) ... exim[275968]: write failed on panic log: length=116 result=-1 errno=9 (Bad file descriptor)
在我的日記中。據我所知,我的根 shell 沒有特定於 exim 的環境變數。這種不同行為的原因可能是什麼?
我在 Arch Linux 上使用 exim 4.94。請詢問您是否需要更多詳細資訊。
這個問題似乎是由 systemd 在
send_mail
完成執行後立即終止生成的 exim 程序引起的。它可以通過在結束時等待適當的時間來解決,或者將 systemd 單元中
send_mail
的選項設置為or (手冊建議不要這樣做)。KillMode``process``none
資料來源: