Systemd 计时器忽略多个小时

Systemd 计时器忽略多个小时

在托管 nginx 的 Arch Linux 机器上,我想自动更新其 LetsEncrypt 证书。我为此编写了一个 .service 和 .timer:

#letsencrypt-update.service
[Unit]
Description=LetsEncrypt Update Service

[Service]
Type=oneshot
ExecStart=/usr/bin/letsencrypt renew --quiet


#letsencrypt-update.timer
[Unit]
Description=LetsEncrypt Update Timer

[Timer]
OnCalendar=03,21:22
Persistent=true

[Install]
WantedBy=basic.target

certbot 文档LetsEncrypt 更新应每天运行两次,每次systemd.time 文档应该可以通过用逗号分隔小时来在 03:22 和 21:22 运行服务,但是当我重新启用计时器时,下一次执行systemctl list-timers是在 03:22 而不是 21:22(这里是上午 10 点)。

这是为什么?systemd 是否必须先运行 03:22 定时器,然后才能执行 21:22 定时器?

答案1

我使用 OnUnitActiveSec=12h 每 12 小时更新一次。这是我的完整 certbot-renewal.timer:

[Unit]
Description=Timer for Certbot Renewal

[Timer]
OnBootSec=300
OnUnitActiveSec=12h

[Install]
WantedBy=multi-user.target

答案2

Meilon 的原始配置似乎没问题。但我会将其用作计时器配置:

#letsencrypt-update.timer
[Unit]
Description=LetsEncrypt Update Timer
PartOf=%p.service

[Timer]
OnCalendar=03,21:22
RandomizedDelaySec=600
Persistent=true

[Install]
WantedBy=basic.target

相关内容