我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=
服务中的行替换为:如果
mailx
路径未列出,您可以使用Environment=
指令显式设置。如果这个明确的提示不能解决您的问题,请务必查看上面链接的常见问题解答以获得更多可能性。
我在 Ubuntu 18.04 上使用
msmtp
andbsd-mailx
允许unattended-upgrades
通过电子邮件向我发送更新。我想我遇到了和你一样的问题。我进行了配置,并且可以使用命令行msmtp
发送电子邮件。如果我自己从命令行运行它,也会给我发送一封电子邮件,但如果会自动运行,那么我将不会收到任何电子邮件。查看我看到的日志:mailx
unattended-upgrades
unattended-upgrades
/var/log/msmtp/msmtp.log
所以设置有问题
From header
。深入研究这一点,默认from
使用的电子邮件地址似乎是,但您可以通过添加来自己定义。这为我修好了。unattended-upgrades
root
/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Sender "<EMAIL_ADDRESS>";