打电话和
systemctl reload nginx
并调用
nginx -s reload
?
我知道,除了 systemd 之外,还有其他 init 系统,例如 SysV 和 Upstart。所以这个问题可能也适用于它们。
最好通过 init 系统发出这个命令还是可以直接调用 nginx 本身?
提前致谢
答案1
systemd reload nginx
您可以通过查看单元文件(位于我的系统上)部分ExecReload=
中的选项来了解将执行的操作:[Service]
nginx.service
/usr/lib/systemd/system/nginx.service
$ systemctl cat nginx | grep ExecReload=
或者运行:
$ systemctl show nginx.service --property=ExecReload
在我的系统上,我得到:
ExecReload=/usr/bin/kill -HUP $MAINPID
从nginx(8)
:
-s signal Send a signal to the master process. The argument signal
can be one of: stop, quit, reopen, reload. The following
table shows the corresponding system signals:
stop SIGTERM
quit SIGQUIT
reopen SIGUSR1
reload SIGHUP
因此,systemctl reload nginx
nginx -s reload
几乎, 做同样的事。
不同之处在于:
systemctl reload nginx
将在干净的环境中执行命令(而不是当前用户环境);systemctl reload
适用于允许它的任何服务(在单元文件中配置了它)。无需记住服务特定的命令。如果您有多个服务实例,这会更有趣。
使用service
或init.d
脚本是完成相同任务的传统/弃用方法。尽管它们可能有效,但在基于 systemd 的系统上,它们不再受支持,也不推荐使用。
答案2
目前 Centos 7 和 RHEL 7 之间存在差异。使用 systemctl reload nginx 将不会验证您的配置。
请参阅以下错误:https://bugzilla.redhat.com/show_bug.cgi?id=1565377
因此我建议使用 nginx -s reload 或更新您的 nginx 单元文件以使用以下 reload 命令:
ExecReload=/usr/sbin/nginx -s reload
https://bugzilla.redhat.com/attachment.cgi?id=1419614&action=diff
答案3
我更喜欢。nginx -s reload
在 Centos8 上,如果配置中出现任何错误,它不会为您提供任何信息(您需要查看 nginx文件以查看错误所在)。会将错误打印到控制台,我发现这更方便。systemctl reload nginx
/bin/kill -s HUP $mainpid
error.log
nginx -s reload
答案4
我们没有成功systemctl
。但是,为了重新加载 nginx 配置,您可以将其发送HUP
到主进程[1]。我们只需使用killall
(不,它不会终止,它会发送信号)发送HUP
到所有 nginx 进程。我假设工作者只是忽略了 HUP:
sudo killall -s HUP nginx
瞧!新配置已加载并应用。