这是基于systemd 是否可以在重启之前执行命令?的答案。
当前“启动或重新启动”服务的方法是:
systemctl is-active nginx && systemctl reload nginx || systemctl start nginx
我想知道是否有更好的方法来使用目标等。我感觉我仍在尝试将 systemd 工具用作其他 init 工具。
我使用这种方法的情况是手动调整配置后,这可能会起作用,但在压力测试期间会崩溃,因此我需要在对配置文件进行新的调整后启动或重新启动。显然,这里的“解决方案”可能是生产中不可接受的,因为这是在 vm/dev 框上完成的。
systemctl restart nginx
将停止然后启动单元。在所有情况下:无论它是否曾经启动过,它是否意外终止,单元是否有重新加载命令。测试运行后无需使用替代动词进行清理。
ExecStartPre=/usr/sbin/nginx -t
请注意,nginx 的一些 systemd 单元(包括 Fedora 等发行版)在启动前会进行语法检查。在编辑器中或通过自动化安装配置文件也可以轻松进行此类检查。当然不会发现所有问题,但尽早发现明显的拼写错误可以减少修复这些错误的停机时间。
systemctl reload nginx
在唯一更改是配置文件的情况下就足够了。您的自动化程序知道包含可执行文件的程序包未更新,但 /etc/nginx/conf.d/ 中的某些内容已更新。您认为它可以运行,并且由于该单元在安装时已启用,因此可以假定它正在运行,因此可以正常重新加载。
独立于服务管理器,如果这很重要,请考虑对其进行监控。来自不同主机的常规请求,例如使用负载平衡器健康检查。集中收集错误日志。