由 Systemd 執行時,無人值守升級不會使用 mailx
我
unattended-upgrades
在執行 Raspbian (Raspbian GNU/Linux 9.4 (stretch)
) 的伺服器上進行了設置。無人值守升級版本:0.93.1+nmu1
更新有效,但我在電子郵件報告方面遇到問題。我想
mailx
用於發送報告。如果我使用命令執行更新,unattended-upgrade -v -d
則會發送報告並使用我在/root/.mailrc
.但是,當
unattended upgrades
由 Systemd 計時器 (apt-daily-upgrade.timer
) 執行時,它不會使用mailx
.如果
sendmail
存在,則用於發送郵件。在這種情況下,郵件被發送,但發件人是root@hostname
並且郵件被標記為垃圾郵件。如果沒有,
sendmail
我會在以下日誌中看到此錯誤apt-daily-upgrade
:Cannot start "/usr/sbin/sendmail": executable not found (adjust *sendmail* variable)
我不明白為什麼根據任務的啟動方式使用不同的郵件程序。
我試圖編輯
unattended-upgrades
Python 程序以強制它使用mailx
:if os.path.exists(SENDMAIL_BINARY): ret = _send_mail_using_sendmail(from_email, to_email, subject, body) elif os.path.exists(MAIL_BINARY): ret = _send_mail_using_mailx(from_email, to_email, subject, body
我將變數更改
SENDMAIL_BINARY
為指向不存在的路徑,因此它將強制使用mailx
. 這在unattended-upgrades
手動呼叫時也有效,但在 Systemd 執行時失敗。(並且上面關於嘗試使用的錯誤sendmail
仍然被記錄下來。)即使由 systemd 自動執行,我如何強制
unattended upgrades
使用以及導致使用的郵件程序不同的原因是什麼?mailx
編輯:
執行無人值守升級的系統單元文件:
[Unit] Description=Daily apt upgrade and clean activities Documentation=man:apt(8) ConditionACPower=true After=apt-daily.service [Service] Type=oneshot ExecStart=/usr/lib/apt/apt.systemd.daily install KillMode=process TimeoutStopSec=900
您的問題是常見問題解答的變體。為什麼在 systemd 下事情會有所不同?.
好處之一
systemd
是它提供了一致的執行環境。為了在安全性和簡單性方面出錯,環境變數集是最小的。
systemd
執行環境的相關文件詳細說明了設置的內容。您提到您的配置位於
root
主目錄中。man mailx
確認它正在尋找~/.mailrc
,而不是固定路徑/root/.mailrc
。
systemd
文件闡明該變數$HOME
僅在使用User=
指令時設置。您沒有共享您的systemd
服務文件,但我認為由於您以 root 身份執行任務,因此您沒有使用該User=
指令。所以這可以解釋你的部分問題。似乎您想要的路徑
$PATH
在執行時可能不是由您的環境變數設置的systemd
。您可以通過將ExecStart=
服務中的行替換為:ExecStart=/bin/echo "My path is $PATH"
如果
mailx
路徑未列出,您可以使用Environment=
指令顯式設置。如果這個明確的提示不能解決您的問題,請務必查看上面連結的常見問題解答以獲得更多可能性。