我在几台服务器上安装了无人值守升级,有些是版本 12,有些是 14。我想为它们启用 MailOnlyOnError,但仍希望在更新需要重新启动时收到电子邮件通知。
启用 MailOnlyOnError 后我还会收到“需要重新启动”通知吗?
谢谢!
答案1
以下是基于以下答案的解决方案这次讨论. 诀窍在于,文件的存在表明需要重新启动/var/run/reboot-required
。
创建/usr/local/sbin/email_update_required
内容为
if [ -f /var/run/reboot-required ]; then
echo "A reboot is required following updates to server `hostname`" | mail -s "Reboot Required" <mail-address>
fi
调整<mail-address>
(例如,调整为root
或您的个人电子邮件地址)。检查权限并使文件可执行。
将以下行放入你的根 crontab ( sudo crontab -e
)
00 08 * * * /usr/local/sbin/email_update_required
(它每天 8 点运行 email_update_required 脚本,根据需要进行调整。)
unattended-upgrades
我已将上述方法应用到具有和的 Ubuntu 14.04 服务器上MailOnlyOnError true"
,并且有效。
不过,如果能有一种更“官方”的 Ubuntu 或无人值守升级方式来获取这些通知邮件就好了。类似的开关MailOnlyOnError
就更好了。
答案2
感谢@Whatsisname 和@azimut 提出的问题和解决方案。现在是 2023 年,我正在使用 Ubuntu 22.04。虽然解决方案仍然有效,但我对该脚本进行了改进...
# To get ADMIN_EMAIL if defined
[ -f ~/.envrc ] && source ~/.envrc
email_address=${ADMIN_EMAIL:-"root@localhost"}
if [ -f /var/run/reboot-required ]; then
echo "The server `hostname` will be rebooted, unattended, as per the schedule!" \
| mail -s "Unattended Reboot" $email_address
fi
从@azimut 之前的回答中可以看出有两点需要注意...
该脚本可以以普通用户身份运行(
/var/run/reboot-required
任何人都可以读取)关于 cron 计时。这应该介于服务器运行
apt-daily-upgrade
服务和文件Automatic-Reboot-Time
中定义的时间之间/etc/apt/apt.conf.d/50unattended-upgrades
。否则,我们将不会收到通知,因为自动重启可能已经发生。apt-daily-upgrade
可以通过运行命令(作为普通用户...systemctl status apt-daily-upgrade.timer
)来查看服务的时间。Automatic-Reboot-Time
是用户定义的。默认值为“现在”,当我们想要提醒自己即将自动重启时,通常不建议使用这个值。