使用定时器在另一个服务执行后立即执行systemd服务

3

我希望apt-update计时器在星期日晚上4:30到5:30之间运行,然后立即运行apt-upgrade计时器。以下是我的设置:

cat << 'EOF' > /etc/systemd/system/apt-daily.timer
[Unit]
Description=Daily apt download activities

[Timer]
OnCalendar=Sun *-*-* 4:30:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target
EOF

cat << 'EOF' > /etc/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=Sun *-*-* 4:30:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload

但有时会发生这种情况:
# systemctl list-timers
NEXT                         LEFT         LAST                         PASSED       UNIT                         ACTIVATES  
Sun 2022-01-16 04:43:35 CET  6 days left  Sun 2022-01-09 21:52:31 CET  7min ago     apt-daily-upgrade.timer      apt-daily-upgrade.service
Sun 2022-01-16 04:53:48 CET  6 days left  Sun 2022-01-09 21:52:31 CET  7min ago     apt-daily.timer              apt-daily.service

systemd忽略了选项After=apt-daily.timer。我该怎么解决?

1个回答

1
计时器单元不使用AfterBefore指令。当计时器已经过去时,计时器会触发服务单元。服务可以利用这些指令来进行依赖项排序,因此可能会有像这样的服务文件(为了说明而简化):
# apt-daily.service
[Unit]
Description=Daily apt download activities

[Service]
...

# apt-daily-upgrade.service
[Unit]
Description=Daily apt upgrade and clean activities
Requires=apt-daily.service
After=apt-daily.service

[Service]
...

可以与计时器一起使用,例如:

# apt-daily.timer
[Unit]
Description=Daily apt download activities timer

[Timer]
OnCalendar=daily
Unit=apt-daily.service

一个相关的帖子,可能会提供一些有用的信息 https://unix.stackexchange.com/questions/216679/synchronize-systemd-unit-based-on-timers - qq4
在计时器的上下文中,“Requires”究竟是什么意思?一旦apt-daily.service至少运行一次,要求就得到满足,然后下周apt-daily-upgrade.service在apt-daily.service之前运行?“After”也是同样的问题。 - Graham Leggett
@GrahamLeggett 这些是服务单元文件,不是定时器。Requires表示依赖于另一个单元,After/Before则指定顺序。我编辑了答案以改善服务和定时器单元之间的清晰度。 - qq4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接