![目标](https://linux22.com/image/720530/%E7%9B%AE%E6%A0%87.png)
目标
在 Debian Stretch 上,我们希望下载任何更新并立即安装它们,因为我们监控待处理的升级数量,并且目前会收到常规情况的通知。
标准拉伸
标准拉伸下载更新并使用以下方式安装它们:
- apt-daily.service
- apt-daily.timer
- apt-daily-upgrade.service
- apt-daily-upgrade.timer
计时器每天随机独立运行,因此下载和安装之间可能有近 24 小时的间隔。
研究与尝试
apt-daily-upgrade.service 修改
基于https://superuser.com/questions/1250874/trigger-another-systemd-unit-to-start-before-timer-unit-starts,我禁用了 apt-daily-upgrade.timer 并修改了 apt-daily-upgrade.service,添加了“Wants=apt-daily.service”
更改后确实运行了 systemctl daemon-reload。
24 小时后 /var/log/unattended-upgrades/unattended-upgrades.log 没有显示无人值守升级已运行。
apt-daily.service 修改
基于链接自定义 systemd 服务,我理解需要将 apt-daily.service 配置为启动 apt-daily-upgrade.service,而不是将 apt-daily-upgrade.service 配置为在 apt-daily.service 之后启动。
撤消对 apt-daily-upgrade.service 的修改并创建 /etc/systemd/system/apt-daily.service 并添加“Before=apt-daily-upgrade.service”:
[Unit]
Description=Daily apt download activities
Documentation=man:apt(8)
ConditionACPower=true
After=network-online.target
Wants=network-online.target
Before=apt-daily-upgrade.service
[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily update
更改后确实运行了 systemctl daemon-reload。
24 小时后 /var/log/unattended-upgrades/unattended-upgrades.log 没有显示无人值守升级已运行。
systemd 日志显示“每日 apt 下载活动”消息,据信表明 apt-daily.service 已运行:
# journalctl | grep 'apt download activities'
Apr 08 16:10:05 web2.iciti.av systemd[1]: Starting Daily apt download activities...
Apr 08 16:10:08 web2.iciti.av systemd[1]: Started Daily apt download activities.
...
结论
我们如何才能实现我们的目标,最好是在 systemd 框架内?
答案1
感谢 user228505,成功了。
/etc/systemd/system/apt-daily.service 已更改为
[Unit]
Description=Daily apt download activities
Documentation=man:apt(8)
ConditionACPower=true
After=network-online.target
Wants=network-online.target
Before=apt-daily-upgrade.service
Wants=apt-daily-upgrade.service
[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily update
我们需要在 apt-daily.service 完成后运行 apt-daily-upgrade.service(在运行无人值守升级之前下载所有软件包)。
将 APT::Periodic::Verbose “3” 添加到 /etc/apt/apt.conf.d/02periodic 表明它正在执行我们想要的操作。
显然,systemd 消息“已开始每日 apt 下载活动”意味着“已完成每日 apt 下载活动”,因为 /usr/lib/apt/apt.systemd.daily 在完成之前不会返回(与大多数在守护进程时返回的服务命令不同)。