Command-Line

這兩個 Linux 伺服器命令之間有區別嗎?

  • December 13, 2021

啟動時,重新啟動 apache 伺服器是否有以下命令之間的區別?

sudo service apache2 restart

sudo service apache2 stop
sudo service apache2 start

sudo systemctl restart apache2

sudo systemctl stop apache2
sudo systemctl start apache2

我只是通過玩 LAMP 堆棧來了解一些關於 Linux 伺服器的知識,但我想知道為什麼某些指南使用一種語法而其他指南使用另一種語法。

我只是通過玩 LAMP 堆棧來了解一些關於 Linux 伺服器的知識,但我想知道為什麼某些指南使用一種語法而其他指南使用另一種語法。

使用我的範例文件,/etc/init.d該文件用於 rlm 許可證管理器,該文件中的相關程式碼與啟動、停止、重新啟動和狀態相關:

status() {
   pid=`_getpid ${RLM_ROOT}/rlm`
   if [ -z "$pid" ]; then
       echo "rlm is stopped"
       return 3
   fi
   echo "rlm (pid $pid) is running..."
   return 0
}

restart() {
   stop
   start
}

case "$1" in
   start)
       start
       ;;
   stop)
       stop
       ;;
   status)
       status
       ;;
   restart)
       restart
       ;;
   *)
       echo $"Usage: $0 {start|stop|status|restart}"
       exit 1
esac

如您所見,restart它只是一個呼叫 stop 然後 start 的函式呼叫。所以這就是全部restart,只不過是呼叫停止然後開始。

init.d 或 systemctl 文件實際上是否可以將重新定義定義為與我的範例不同並且涉及更多? 是的,您必須親自查看程式碼才能真正了解。但很可能它們都與我在上面發布的內容非常相似,包括你的 apache 文件,關於 start | 停止 | 重啟 | 地位。

在您的問題的上下文中,如果您想停止並啟動您的 apache2 服務,那麼與service apache2 restart手動執行兩個單獨的命令先停止然後啟動相比,完成該操作的最少輸入量將是相反的。但無論哪種方式,你都會完成同樣的事情。還要認識到,如果您這樣做了,restart那麼服務將在停止後立即嘗試啟動,無論停止是否成功;這可能是好是壞取決於您正在做什麼或調試。有時,service whatever stop在手動發出後續的service whatever start.

init.d是圍繞語法結構工作的舊 linux 方式service,現在被systemd linux 和systemctl語法結構所取代。但是service whatever <start|stop|restart|status仍然受支持並將別名為systemctl <start|stop|restart|status whatever. 所以在現代 systemd linux 系統上使用servicevs沒有區別。systemctl如果您嘗試systemctl在舊的 init.d 類型的 linux 系統上使用,例如 redhat5,它只會是 command not found

$$ hopefully $$出於顯而易見的原因。您可以閱讀解釋 initd 與 systemd 的網路文章。 service whatever <start|stop|status|restart>在文件中使用語法以及在命令行中鍵入它仍然是完全有效和正確的。對於文件和指南,它以最少的字元量表達了要點,並且由於它幾乎直接別名為 systemctl (它們是服務),我認為在任何文件中繼續使用舊的initd服務語法更具可讀性.

引用自:https://unix.stackexchange.com/questions/681276