如何重新加载 nginx - systemctl 或 nginx -s?

如何重新加载 nginx - systemctl 或 nginx -s?

打电话和

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 nginxnginx -s reload几乎, 做同样的事。

不同之处在于:

  • systemctl reload nginx将在干净的环境中执行命令(而不是当前用户环境);
  • systemctl reload适用于允许它的任何服务(在单元文件中配置了它)。无需记住服务特定的命令。如果您有多个服务实例,这会更有趣。

使用serviceinit.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 $mainpiderror.lognginx -s reload

答案4

我们没有成功systemctl。但是,为了重新加载 nginx 配置,您可以将其发送HUP到主进程[1]。我们只需使用killall(不,它不会终止,它会发送信号)发送HUP到所有 nginx 进程。我假设工作者只是忽略了 HUP:

sudo killall -s HUP nginx

瞧!新配置已加载并应用。

[1]http://nginx.org/en/docs/control.html

相关内容