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

systemd:在上一个服务完成后启动服务,systemd,certbot,Systemd,Certbot,我已经安装了certbot,certbot为自动证书续订创建了自己的系统服务文件“certbot.service”,该文件通过.timer文件每天启动一次 在这个“certbot.service”成功执行之后,我想执行第二个(“certbot.service之后的cert copy”),将证书复制到另一个地方 当前我的设置如下所示: pi@raspberrypi:/etc/systemd/system $ cat cert-copy-after-certbot.service [Unit] De

我已经安装了certbot,certbot为自动证书续订创建了自己的系统服务文件“certbot.service”,该文件通过.timer文件每天启动一次

在这个“certbot.service”成功执行之后,我想执行第二个(“certbot.service之后的cert copy”),将证书复制到另一个地方

当前我的设置如下所示:

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
“certbot.service”(由certbot生成):

“certbot.service之后的证书副本”:

cert-copy-after-certbot.service未运行


我的配置有问题吗?

我找到了解决方案,因此如果有人有相同的问题,这里给出了答案

问题是“certbot.service”单元不知道“certbot.service之后的证书副本”。因此,如果调用“certbot.service”,没有人会调用非活动的“certbot.service之后的证书副本”,因为“Wants=”从未执行过


因此,如果您不想更改“certbot.service”单元(在certbot.service之后使用“Wants=cert copy”),您可以执行以下操作

在“certbot.service之后的cert copy”中添加一个额外的[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

此[安装]部分将在您启用通知systemd执事的单元后立即创建一个符号链接。如果调用“certbot.service”,他必须调用“certbot.service之后的cert copy”(单元部分中的“after=”告诉systemd该单元调用的行,如果没有它,两个单元将同时运行)

您可能会发现
certbot.service之后的证书复制在
cerbot.service
之前启动。除非您在
cerbot.service
中还设置了
RemainAfterExit=yes
,否则服务
已完成

systemctl start <unitname>
systemctl status cert-copy-after-certbot
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 enable cert-copy-after-certbot