CentOS 7 採用 systemd,廢除傳統 SysVinit runlevel,改用 Target 代表系統狀態。對應關係如下:
| 傳統 Runlevel | Systemd Target | 說明 |
|---|---|---|
| 0 | poweroff.target | 關機 |
| 1 | rescue.target | 單用戶/救援模式 |
| 2,3,4 | multi-user.target | 文字模式(無圖形介面) |
| 5 | graphical.target | 圖形模式 |
| 6 | reboot.target | 重啟 |
/lib/systemd/system/runlevel*.target 僅為符號連結指向對應 target。
# 切換至文字模式(原 runlevel 3)
systemctl isolate multi-user.target
# 或
systemctl isolate runlevel3.target
# 切換至圖形模式(原 runlevel 5)
systemctl isolate graphical.target
# 或
systemctl isolate runlevel5.target
isolate會啟動目標 target 並停止不相容的單元,類似舊init 3/5。
# 文字模式預設
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
# 或
ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
# 圖形模式預設
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
# 或
ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
# 文字模式
systemctl set-default multi-user.target
# 圖形模式
systemctl set-default graphical.target
執行後可用 systemctl get-default 驗證。
# 傳統指令仍可用
runlevel
# 輸出範例:N 3 表示從無前一級別進入 3
# systemd 原生查法
systemctl list-units --type=target --state=active
# 顯示所有啟動中的 target
linux16 / linuxefi 行尾加入:systemd.unit=rescue.target 或 systemd.unit=emergency.target。rescue.target掛載根檔案系統(唯讀),啟動基本服務;emergency.target更精簡,僅掛載根目錄,適合修復嚴重損壞。
/etc/inittab 還能用嗎?inittab,僅保留相容符號連結。請改用 target 管理。/etc/systemd/system/,修改 Wants=/Requires= 依賴關係,再 systemctl daemon-reload。掌握 systemd target 機制,即可彈性控制 CentOS 7 的啟動模式與服務依賴,取代舊有 runlevel 概念,更符合現代服務管理需求。