`nginx -s` 和 `service nginx` 一样吗?

`nginx -s` 和 `service nginx` 一样吗?

nginx -s reload我注意到许多类似和 的命令nginx -s stop似乎(几乎?)与service nginx reload和相同service nginx stop

这些“前缀”真的可以互换吗?其中一个会以某种方式调用另一个吗?

答案1

由于你正在运行 Ubuntu 18.04(即最新的 Linux 发行版),我建议你使用第三个“别名”命令:systemctl reload nginx/etc/init.d/nginx reload

整个故事是这样的:每个服务器/应用程序都有自己的启动、停止、重新加载等方式。这可能像调用一样简单,nginx也可能像设置几个环境变量并调用java <a_lot_of_options> org.apache.catalina.startup.Bootstrap startTomcat 一样复杂。

为了提供一种统一且自动的方式来启动应用程序,发行版提供了初始化脚本(或类似脚本),在新的 Ubuntu 上有三种变体:

  1. 现代systemdsystemctl <verb> nginx
  2. Ubuntu 的遗产暴发户service nginx <verb>
  3. 最老的SysV 初始化/etc/init.d/nginx <verb>

在 Ubuntu 上systemd是实际运行的,而其他的则调用systemd.nginx 的配置(/lib/systemd/system/nginx.service文件)包含:

ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid

所以:

  • systemctl reload nginx调用nginx -s reload,但使用附加选项-g 'daemon on; master_process on;',覆盖这两个配置选项,
  • systemctl stop nginx使用辅助程序start-stop-daemon来监督nginx关闭。这个程序会SIGQUIT向nginx发送一个信号,作用和一样nginx -s quit,等待5秒,如果nginx还在运行就宣布失败。

一般来说,最好使用systemctl <verb> <service>命令而不是直接启动应用程序。

编辑: 实际上systemd它所做的远不止执行命令:它将其输入/输出连接到systemd 日志,它限制了其可支配的资源(cgroups)以及系统其他部分的可见性(命名空间)它配置流程能力或许还有更多。

相关内容