使用 systemd 停止一个服务并让另一个服务运行

使用 systemd 停止一个服务并让另一个服务运行

我正在设置一个 systemd 服务来更新 letsencrypt 的 SSL 证书。我想要实现的是让 systemd 计时器停止 nginx 服务,运行我的证书更新脚本,然后重新启动 nginx。

systemd 是否有一些巧妙的方法来实现这一点?还是我只需要在脚本本身中执行相关的停止和启动操作?

答案1

systemd 是否有一些巧妙的方法来实现这一点?还是我只需要在脚本本身中执行相关的停止和启动操作?

不,没有“聪明的方法”。简而言之

systemctl stop <whatever>

systemctl start <whatever>

根据需要在更新脚本中

答案2

Letsencrypt 具有更新前和更新后的挂钩。

添加此

[renewal-params]
# Other settings
pre-hook=systemctl stop <service name>
post-hook=systemctl start <service name>

每次运行时都会/etc/letsencrypt/renewal/<domain name>.conf停止并启动服务certbot renew

答案3

如果我理解正确的话,您想安排 nginx 停止以减少停机时间。

我不知道系统 D,但对于任何 unix 命令,您都可以使用“at”来构建自己的命令。

例如


echo "systemctll stop nginx && mv /etc/my/cert/new.cert && systemctll start nginx" | at -m 5:00

相关内容