我注意到許多命令如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
為了提供一種統一且自動的方式來啟動應用程序,發行版提供了 init 腳本(或類似的腳本),在新的 Ubuntu 上有以下三種變體:
- 現代的系統:
systemctl <verb> nginx
, - 遺產(對於 Ubuntu)暴發戶:
service nginx <verb>
, - 最老的系統V初始化:
/etc/init.d/nginx <verb>
。
在Ubuntu上系統是實際運行的,而其他則調用系統。 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>
命令而不是自己啟動應用程式。
編輯: 實際上系統不僅僅是執行命令:它將其輸入/輸出連接到系統日誌,它限制了可支配的資源(cgroups)以及系統其他部分的可見性(命名空間),它配置進程能力也許還有更多。