systemd:在上一个完成之后启动服务

时间:2018-01-18 18:36:04

标签: systemd certbot

我已经安装了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没有运行。

我配置错了吗?

2 个答案:

答案 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完成之前启动的。