我已经安装了 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
Run Code Online (Sandbox Code Playgroud)
“cert-copy-after-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"
Run Code Online (Sandbox Code Playgroud)
如果我运行这个文件:
systemctl start <unitname>
Run Code Online (Sandbox Code Playgroud)
两项服务均正常运行。
但是当我用“systemctl start certbot”启动 certbot 并检查
systemctl status cert-copy-after-certbot
Run Code Online (Sandbox Code Playgroud)
cert-copy-after-certbot.service 未运行。
是我配置错误了吗?
我找到了解决方案,所以如果有人遇到同样的问题,这里就是答案。
问题是“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
Run Code Online (Sandbox Code Playgroud)
安装部分需要通过 systemctl 进行启用或禁用调用(或者启动或停止以进行临时测试)。
systemctl enable cert-copy-after-certbot
Run Code Online (Sandbox Code Playgroud)
一旦您启用通知 systemd 守护程序的单元,此 [Install] 部分将创建一个符号链接,如果调用“certbot.service”,他必须调用“cert-copy-after-certbot.service”。(单元部分中的“After =”告诉systemd灵魂调用的行,没有它,两个单元将同时运行)
| 归档时间: |
|
| 查看次数: |
7353 次 |
| 最近记录: |