在 Linux 上管理系統服務(daemon),現在幾乎都離不開 `systemctl` 這個指令。這篇文章整理 `systemctl` 的指令語法、每個 subcommand 的用途,以及以 `atd` 服務為例的實際操作範例,讓你不用再翻手冊就能完成啟動、停止、開機啟用等日常服務管理工作。
什麼是 systemctl?為什麼它取代了 service 和 chkconfig?
`systemctl` 是系統服務管理的指令,它將傳統的 `service` 和 `chkconfig` 這兩個命令組合到一起:`service` 負責的「立即啟動/停止」與 `chkconfig` 負責的「開機是否啟用」,現在都交由 `systemctl` 一個指令處理。只要系統採用 Systemd(CentOS 7 之後、多數主流發行版),服務管理就應該以 `systemctl` 為準。
以下是一張當時整理的指令總覽截圖:

systemctl 的語法怎麼寫?
基本語法只有一行:
```cmd
[root@study ~]# systemctl [command] [unit]
```
其中 `unit` 就是要操作的服務名稱(通常帶 `.service` 副檔名,可省略),`command` 則主要有以下這些:
| command | 說明 |
|---|---|
| `start` | 立刻啟動後面接的 unit |
| `stop` | 立刻關閉後面接的 unit |
| `restart` | 立刻關閉後啟動後面接的 unit,亦即執行 stop 再 start 的意思 |
| `reload` | 不關閉後面接的 unit 的情況下,重新載入設定檔,讓設定生效 |
| `enable` | 設定下次開機時,後面接的 unit 會被啟動 |
| `disable` | 設定下次開機時,後面接的 unit 不會被啟動 |
| `status` | 目前後面接的這個 unit 的狀態,會列出有沒有正在執行、開機預設執行否、登錄等資訊 |
| `is-active` | 目前有沒有正在運作中 |
| `is-enabled` | 開機時有沒有預設要啟用這個 unit |
簡單記法:`start`/`stop`/`restart`/`reload` 管「現在此刻」,`enable`/`disable` 管「下次開機」,`status`/`is-active`/`is-enabled` 用來查狀態。
systemctl 實際使用範例
以 `atd` 服務為例,常用的操作如下:
啟動 atd 服務:
```cmd
[root@study ~]# systemctl start atd.service
```
關閉 atd 服務:
```cmd
[root@study ~]# systemctl stop atd.service
```
查看服務目前狀態:
```cmd
[root@study ~]# systemctl status atd.service
```
設定開機時自動啟動:
```cmd
[root@study ~]# systemctl enable atd.service
```
設定開機時不要自動啟動:
```cmd
[root@study ~]# systemctl disable atd.service
```
查看所有已啟動的服務:
```cmd
[root@study ~]# systemctl list-units --type=service
```
重啟某個服務:
```cmd
[root@study ~]# systemctl restart atd.service
```
`systemctl status` 的輸出特別實用:它會同時告訴你服務現在是否在執行(`active (running)`)、有沒有被設定為開機啟動(`enabled`/`disabled`),以及最近的日誌,一行指令就能掌握服務全貌。
延伸閱讀
常見問題
systemctl 和傳統的 service、chkconfig 有什麼差別?
`systemctl` 把 `service` 的啟停功能與 `chkconfig` 的開機啟用設定合併成一個指令。在採用 Systemd 的發行版(如 CentOS 7+)上,`service` 與 `chkconfig` 只是相容層,建議直接使用 `systemctl`。
systemctl enable 和 systemctl start 有什麼不同?
`start` 是「現在立刻」啟動服務,重開機後不會自動啟動;`enable` 是設定「下次開機」時自動啟動服務,但不會立刻啟動。要同時達到兩個效果,可以連續執行 `systemctl enable --now <unit>`。
如何確認服務目前是否正在執行?
用 `systemctl status <unit>` 可以看到完整狀態與日誌;只想快速確認是否在運作,可用 `systemctl is-active <unit>`,回傳 `active` 即代表執行中。
如何列出系統上所有已啟動的服務?
執行 `systemctl list-units --type=service` 可列出目前載入且正在運作的服務。若要包含開機啟用但未執行的,可加上 `--all` 參數。
參考資料
- 本文為 IT邦幫忙鐵人賽系列筆記,指令說明參考鳥哥的 Linux 私房菜之 Systemd 服務管理章節。
最後更新
2026-08-28(原文發布於 2019-10-01,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2019-10-01
