Linux 服務管理進化論:systemctl 與 service 指令的差異與選用指南
· 閱讀時間約 7 分鐘
在 Linux 系統管理中, 服務(Service)的啟動、停止與狀態監控是日常維運的基本功。隨著 Linux 發行版的演進,管理服務的方式也歷經了重大的架構轉變:從早期基於 SysVinit 的 service 指令,過渡到現今主流的 systemd 及其配套工具 systemctl。
理解這兩套工具的差異,不僅是系統管理員的必備知識,也有助於在面對不同年代的伺服器環境時,做出正確的判斷與因應。

背景:兩種啟動系統的歷史脈絡
SysVinit 與 service 指令
早期的 Linux 系統(如 Debian 6、CentOS 5 等)採用 SysVinit(System V init)作為第一支啟動的行程(PID 1)。在這個架構中,服務管理是透過存放在 /etc/init.d/ 目錄下的 Shell Script 來實現的,而 service 指令則是這些 Script 的統一呼叫介面。
# 傳統 service 指令語法
service <服務名稱> <動作>
由於 /etc/init.d/ 內的每個檔案本質上都是 Shell Script,其功能、輸出格式與錯誤處理方式完全依賴各個撰寫者的實作,缺乏一致的標準。
systemd 與 systemctl 指令
約從 2011 年起,systemd 開始逐步取代 SysVinit,成為 Fedora、Ubuntu(15.04 後)、Debian(8 後)、CentOS/RHEL(7 後)等主流發行版的標準初始化系統。
systemctl 是 systemd 的主要管理指令,負責控制系統服務(Unit)、掛載點、Socket、Timer 等各種 systemd 資源。
# systemctl 指令語法
systemctl <動作> <服務名稱>