我已经安装了certbot,并且certbot为自动证书更新提供了自己的systemd服务文件“certbot.service”,该文件每天通过.timer文件启动一次。
在“certbot.service”成功执行之后,我喜欢执行第二个(“cert-copy-after-certbot.service”),将证书复制到另一个地方。
目前我的设置如下:
“certbot.service”(由certbot生成):
pi@raspberrypi:/lib/systemd/system $ cat certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://letsencrypt.readthedocs.io/en/latest/
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true
“CERT-复制后certbot.service”:
pi@raspberrypi:/etc/systemd/system $ cat cert-copy-after-certbot.service
[Unit]
Description=crt update after certbot has run
Wants=certbot.service
After=certbot.service
[Service]
Type=simple
ExecStart=/bin/sh -c "cat /etc/letsencrypt/live/<mydomain>/privkey.pem /etc/letsencrypt/live/<mydomain>/fullchain.pem > /etc/ejabberd/ejabberd.pem"
如果我使用以下命令运行此文件:
systemctl start <unitname>
这两项服务都在运作。
但是当我使用“systemctl start certbot”启动certbot并检查
时systemctl status cert-copy-after-certbot
cert-copy-after-certbot.service没有运行。
我配置错了吗?
答案 0 :(得分:0)
我找到了解决方案,所以这里的答案就是有人有同样的问题。
问题是“certbot.service”单元不知道“cert-copy-after-certbot.service”。因此,如果调用“certbot.service”,则不会调用非活动的“cert-copy-after-certbot.service”,因为永远不会执行“Wants =”。
因此,如果您不想改变“certbot.service”单元(使用“Wants = cert-copy-after-certbot.service”,则可以执行以下操作。
在“cert-copy-after-certbot.service”中添加一个额外的[Install]部分,其中包含“WantedBy = cerbot.service”行。这样文件看起来像这样:
pi@raspberrypi:/etc/systemd/system $ cat cert-copy-after-certbot.service
[Unit]
Description=crt update after certbot has run
After=certbot.service
[Service]
Type=simple
ExecStart=/bin/sh -c "cat /etc/letsencrypt/live/<mydomain>/privkey.pem/etc/letsencrypt/live/<mydomain>/fullchain.pem > /etc/ejabberd/ejabberd.pem"
[Install]
WantedBy=certbot.service
安装部分需要systemctl启用或禁用调用(或启动或停止临时测试)。
systemctl enable cert-copy-after-certbot
如果启用通知systemd守护程序的单元,如果调用“certbot.service”,则[Install]部分将创建一个符号链接,他必须调用“cert-copy-after-certbot.service”来。 (并且单位部分中的“After =”告诉systemd sould调用的行,没有它,两个单元将同时运行)
答案 1 :(得分:0)
除非您在cert-copy-after-certbot.service
中设置了cerbot.service
,否则您可能会发现RemainAfterExit=yes
是在cerbot.service
完成之前启动的。