目标

目标

目标

在 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 在完成之前不会返回(与大多数在守护进程时返回的服务命令不同)。

相关内容