如何重新加载一组systemd服务?


12

我想在事件发生时重新加载(而不重新启动!)一组服务。

例如,如果我更新SSL证书,则希望使用它们的每个服务都重新加载(nginxpostfix记入)。我也不想记住给定服务器上的哪些服务使用SSL证书。在配置它们时将它们分组就足够了。

另一方面,我想避免更改.service软件包随附的文件,因为这将需要在更新过程中进行手动干预。

我该怎么做?

有一个选项可以根据请求停止一组服务,但这将使它们在一两秒钟内无法访问,甚至更糟-它们可能会停下来直到修复。我负担不起。


我不确定如何部署证书,但是这也是大多数自动续订的预钩和后钩 /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop; service postfix stop; service squid stop" --post-hook "service nginx start; service postfix start; service squid start" :certmonger具有postave和presave命令
Jacob Evans

@JacobEvans这就是我使用的!较早之前,certbot的配置文件解析器中存在问题:它不允许使用分号。因此,您必须使用命令行参数,或者一次性使用它。现在,所有这些都是不必要的。
sanmai'4

如果您将.service文件编辑设置为替代,则可以避免更新问题。 sudo systemctl edit foo.service将存储您/etc/systemd/system/foo.service.d/override.conf所做的更改,而不是更改已安装的foo.service文件。
quixotic

Answers:


21

/etc/systemd/system/ssl-reload.target使用以下内容创建。

[Unit]
Description=Services which need reloaded with SSL certs are updated.
PropagatesReloadTo=nginx postfix

然后创建另一个文件: /etc/systemd/system/ssl-reload.path

[Unit]
Description=Restart services which use SSL when the cert directory changes

[Path]
PathChanged=/path/to/your/ssl/certs/dir

[Install]
WantedBy=multi-user.target

然后:

systemctl enable ssl-reload.path
systemctl start ssl-reload.path

话虽如此,更改SSL目录中的内容后,所需的服务应自动重新加载。

如果您不希望出现自动行为,则不要使用该.path文件,而只需systemctl reload ssl-reload.target在更改SSL文件后手动发布即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.