![将 systemd 计时器设置为奇数且特定的天数](https://linux22.com/image/159573/%E5%B0%86%20systemd%20%E8%AE%A1%E6%97%B6%E5%99%A8%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%A5%87%E6%95%B0%E4%B8%94%E7%89%B9%E5%AE%9A%E7%9A%84%E5%A4%A9%E6%95%B0.png)
我在 CentOS 7 服务器上使用 systemd.timers,并设置了一个计时器来自动续订 Certbot 管理的 Let's Encrypt 网站证书。
自动续订.服务:
[Unit]
Description=certbot certificate auto-renewal service file
[Service]
Type=simple
ExecStart=/usr/local/sbin/certbot-auto renew
[Install]
WantedBy=multi-user.target
自动续订.计时器:
[Unit]
Description=Renew certs every 10th every 3 months
[Timer]
OnCalendar=*-2,5,8,11-10 08:00:00
Persistent=true
Unit=certbotautorenewal.service
[Install]
WantedBy=multi-user.target
问题是,据我所知,对于 OnCalendar 事件,计时器只能设置为特定日期(例如,每月 15 日或每 3 个月),但 Let's Encrypt 证书将在特定天数后过期(90)。我想早一点更新证书,比如每83天甚至两个半月更新一次。我知道 Let's Encrypt 到期机器人建议每 60 天续订一次,但我不太相信它,因为当证书在 20 天而不是 30 天后到期时,就会开始出现到期通知消息。我不想在证书到期时续订证书尚未到期,因为更新命令将被忽略,当一个月后最终需要它时,它不会在那里。现在,我使用一种笨拙的解决方法,必须在每次续订后提前几天设置“每 3 个月的某一天”续订时间。有没有实际的解决方案?因为出于某种原因,certbot 强制在 CentOS 7 上使用 systemd 计时器而不是 cron。也许计时器语法中隐藏了一个减法选项?或者,例如,使用 bash 将日历与天数同步。