在托管 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
PartOf=%p.service - 将两个单元链接在一起
RandomizedDelaySec=600 - 使用随机启动延迟(例如 10 分钟或更长时间)来应用“选择一小时内的随机一分钟来完成你的续订任务”