「nginx -s」與「service nginx」相同嗎?

「nginx -s」與「service nginx」相同嗎?

我注意到許多命令如nginx -s reloadnginx -s stop似乎(幾乎?)與service nginx reload和相同service nginx stop

這些「前綴」實際上可以互換嗎?其中一個是否會以某種方式呼叫另一個?

答案1

由於您運行的是 Ubuntu 18.04(即最新的 Linux 發行版),我可能會建議第三個“別名”命令:systemctl reload nginx/etc/init.d/nginx reload

整個故事是這樣的:每個伺服器/應用程式都有自己的啟動、停止、重新載入等方式nginxjava <a_lot_of_options> org.apache.catalina.startup.Bootstrap start

為了提供一種統一且自動的方式來啟動應用程序,發行版提供了 init 腳本(或類似的腳本),在新的 Ubuntu 上有以下三種變體:

  1. 現代的系統: systemctl <verb> nginx,
  2. 遺產(對於 Ubuntu)暴發戶: service nginx <verb>,
  3. 最老的系統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關閉。程式將向SIGQUITnginx 發送訊號,與 相同nginx -s quit,等待 5 秒,如果 nginx 仍在運行則宣布失敗。

一般來說,最好使用systemctl <verb> <service>命令而不是自己啟動應用程式。

編輯: 實際上系統不僅僅是執行命令:它將其輸入/輸出連接到系統日誌,它限制了可支配的資源(cgroups)以及系統其他部分的可見性(命名空間),它配置進程能力也許還有更多。

相關內容