16 Using systemd units instead of cron
Roy Orbitson edited this page 2026-09-14 16:29:16 +09:30

1. Create a systemd unit for acme.sh:

/etc/systemd/system/acme_letsencrypt.service

[Unit]
Description=Renew Let's Encrypt certificates using acme.sh
After=network-online.target nss-lookup.target

[Service]
Type=oneshot
SyslogIdentifier=acme.sh
Environment=NO_TIMESTAMP=1
# --home's argument should be where the acme.sh script resides.
ExecStart=/path/to/acme.sh --cron --home /path/to/acme.sh

2. Test that it works before creating the timer:

sudo systemctl daemon-reload
sudo systemctl start acme_letsencrypt
journalctl -u acme_letsencrypt.service

3. Create systemd timer unit for the service above:

/etc/systemd/system/acme_letsencrypt.timer

[Unit]
Description=Renewal of Let's Encrypt certificates

[Timer]
OnCalendar=0/6:00:00
RandomizedOffsetSec=6h
FixedRandomDelay=true
Persistent=true

[Install]
WantedBy=timers.target

4. Enable timer:

sudo systemctl enable --now acme_letsencrypt.timer