![`nginx -s` 和 `service nginx` 一样吗?](https://linux22.com/image/747454/%60nginx%20-s%60%20%E5%92%8C%20%60service%20nginx%60%20%E4%B8%80%E6%A0%B7%E5%90%97%EF%BC%9F.png)
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 start
Tomcat 一样复杂。
为了提供一种统一且自动的方式来启动应用程序,发行版提供了初始化脚本(或类似脚本),在新的 Ubuntu 上有三种变体:
- 现代systemd:
systemctl <verb> nginx
, - Ubuntu 的遗产暴发户:
service nginx <verb>
, - 最老的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)以及系统其他部分的可见性(命名空间)它配置流程能力或许还有更多。