系统计时器不启动其服务单元

情况

我已经写了一个自定义的systemd服务单元和它的伴随shell脚本来从Let's Encrypt中更新一个证书。 当我运行systemctl start letsencrypt-example_com.service时,一切正常。 我希望它每60天自动运行一次,所以我写了一个systemd定时器单元。

问题

我跑了systemctl enable letsencrypt-example_com.timer然后systemctl start letsencrypt-example_com.timer 。 计时器似乎开始,但不是服务。

 # systemctl status letsencrypt-example_com.timer Created symlink from /etc/systemd/system/timers.target.wants/letsencrypt-example_com.timer to /etc/systemd/system/letsencrypt-example_com.timer. # systemctl start letsencrypt-example_com.timer # systemctl list-timers --all # systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES n/an/a ven. 2016-05-06 13:10:13 CEST 1h 51min ago letsencrypt-example_com.timer letsencrypt-example_com.service # systemctl status letsencrypt-example_com.timer ● letsencrypt-example_com.timer - Run letsencrypt-example_com every 60 days Loaded: loaded (/etc/systemd/system/letsencrypt-example_com.timer; enabled) Active: active (elapsed) since ven. 2016-05-06 15:01:57 CEST; 2min 50s ago # systemctl status letsencrypt-example_com.service ● letsencrypt-example_com.service - letsencrypt certificat renewal for example.com and subdomains Loaded: loaded (/etc/systemd/system/letsencrypt-example_com.service; static) Active: inactive (dead) 

cat /etc/systemd/system/letsencrypt-example_com.service

 [Unit] Description=letsencrypt certificat renewal for example.com and subdomains Requires=nginx_reload.service Before=nginx_reload.service [Service] Type=simple ExecStart=/bin/sh /usr/local/bin/letsencrypt-renew.sh example.com www.example.com User=letsencrypt Group=www-data 

/usr/local/bin/letsencrypt-renew.sh

 #!/bin/sh letsencrypt certonly \ --server https://acme-v01.api.letsencrypt.org/directory \ --text \ --email [email protected] \ --agree-tos \ --rsa-key-size 4096 \ --authenticator webroot \ --webroot-path /srv/files/letsencrypt/www \ $( for fqdn in $@; do echo "--domain $fqdn"; done; ) \ --force-renew 

/etc/systemd/system/letsencrypt-example_com.timer

 [Unit] Description=Run letsencrypt-example_com every 60 days [Timer] OnUnitActiveSec=1min Persistent=true Unit=letsencrypt-example_com.service [Install] WantedBy=timers.target 

/etc/systemd/system/nginx_reload.service

 [Unit] Description=reload nginx conf [Service] Type=oneshot ExecStart=/bin/systemctl reload nginx 

虽然定时器单元会自动获得它们应该激活的服务的依赖关系 ,但它们显然不会自动产生对它的依赖(这对我来说没有任何意义)。

所以我在定时器单元的[Unit]部分添加了以下行,现在按照预期启动服务:

 Requires=letsencrypt-example_com.service 

我还在[Timer]部分设置了AccuracySec10s )。