修改配置文件以後,需要重新加載配置文件,然後重新啟動相關服務。
# 重新加載配置文件 $ sudo systemctl daemon-reload # 重啟相關服務 $ sudo systemctl restart foobar
開機啟動unit
systemctl enable test.service 增加由/lib/systemd/system/到/etc/systemd/system/multi-user.target.wants/下的軟鏈接 ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/test.service'
一旦修改配置文件,就要讓 SystemD 重新加載配置文件,然後重新啟動,否則修改不會生效。
$ sudo systemctl daemon-reload $ sudo systemctl restart httpd.service
開機不啟動unit
systemctl disable test.service 刪除/etc/systemd/system/multi-user.target.wants下的軟鏈接
查看開機是否啟動
systemctl is-enabled test.service #查詢服務是否開機啟動
systemd查看開機自啟動的程序
ls /etc/systemd/system/multi-user.target.wants/
查看systemd單元加載及活動情況
systemctl
顯示啟動失敗的單元
systemctl --failed
查看systemd管理的所有單元
systemctl list-unit-files
啟動服務
systemctl start httpd.service
關閉服務
systemctl stop httpd.service
重啟服務
systemctl restart httpd.service
重新加載
systemctl reload httpd.service
查看狀態
systemctl status httpd.service 包括啟動狀態、啟動時間、主進程及相關進程、相關日志
systemctl是 Systemd 的主命令,用於管理系統。
# 重啟系統 $ sudo systemctl reboot # 關閉系統,切斷電源 $ sudo systemctl poweroff # CPU停止工作 $ sudo systemctl halt # 暫停系統 $ sudo systemctl suspend # 讓系統進入冬眠狀態 $ sudo systemctl hibernate # 讓系統進入交互式休眠狀態 $ sudo systemctl hybrid-sleep # 啟動進入救援狀態(單用戶狀態) $ sudo systemctl rescue
# 列出正在運行的 Unit $ systemctl list-units # 列出所有Unit,包括沒有找到配置文件的或者啟動失敗的 $ systemctl list-units --all # 列出所有沒有運行的 Unit $ systemctl list-units --all --state=inactive # 列出所有加載失敗的 Unit $ systemctl list-units --failed # 列出所有正在運行的、類型為 service 的 Unit $ systemctl list-units --type=service
# 顯示某個 Unit 是否正在運行 $ systemctl is-active application.service # 顯示某個 Unit 是否處於啟動失敗狀態 $ systemctl is-failed application.service # 顯示某個 Unit 服務是否建立了啟動鏈接 $ systemctl is-enabled application.service
[Unit]區塊通常是配置文件的第一個區塊,用來定義 Unit 的元數據,以及配置與其他 Unit 的關系。它的主要字段如下。
Description:簡短描述 Documentation:文檔地址 Requires:當前 Unit 依賴的其他 Unit,如果它們沒有運行,當前 Unit 會啟動失敗 Wants:與當前 Unit 配合的其他 Unit,如果它們沒有運行,當前 Unit 不會啟動失敗 BindsTo:與Requires類似,它指定的 Unit 如果退出,會導致當前 Unit 停止運行 Before:如果該字段指定的 Unit 也要啟動,那麼必須在當前 Unit 之後啟動 After:如果該字段指定的 Unit 也要啟動,那麼必須在當前 Unit 之前啟動 Conflicts:這裡指定的 Unit 不能與當前 Unit 同時運行 Condition:當前 Unit 運行必須滿足的條件,否則不會運行 Assert:當前 Unit 運行必須滿足的條件,否則會報啟動失敗
!!!重要
eg:After=network.target sshd-keygen.service After字段:表示如果network.target或sshd-keygen.service需要啟動,那麼當前.service應該在它們之後啟動。 相應地,還有一個Before字段,定義sshd.service應該在哪些服務之前啟動。 注意,After和Before字段只涉及啟動順序,不涉及依賴關系。
[Install]通常是配置文件的最後一個區塊,用來定義如何啟動,以及是否開機啟動。它的主要字段如下。
WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants後綴構成的子目錄中 RequiredBy:它的值是一個或多個 Target,當前 Unit 激活時,符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .required後綴構成的子目錄中 Alias:當前 Unit 可用於啟動的別名 Also:當前 Unit 激活(enable)時,會被同時激活的其他 Unit
[Service]區塊用來 Service 的配置,只有 Service 類型的 Unit 才有這個區塊。它的主要字段如下。
Type:定義啟動時的進程行為。它有以下幾種值。 Type=simple:默認值,執行ExecStart指定的命令,啟動主進程 Type=forking:以 fork 方式從父進程創建子進程,創建後父進程會立即退出 Type=oneshot:一次性進程,Systemd 會等當前服務退出,再繼續往下執行 Type=dbus:當前服務通過D-Bus啟動 Type=notify:當前服務啟動完畢,會通知Systemd,再繼續往下執行 Type=idle:若有其他任務執行完畢,當前服務才會運行 ExecStart:啟動當前服務的命令 ExecStartPre:啟動當前服務之前執行的命令 ExecStartPost:啟動當前服務之後執行的命令 ExecReload:重啟當前服務時執行的命令 ExecStop:停止當前服務時執行的命令 ExecStopPost:停止當其服務之後執行的命令 RestartSec:自動重啟當前服務間隔的秒數 Restart:定義何種情況 Systemd 會自動重啟當前服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數 Environment:指定環境變量
Unit 配置文件的完整字段清單,請參考官方文檔。
Systemd 統一管理所有 Unit 的啟動日志。帶來的好處就是,可以只用journalctl一個命令,查看所有日志(內核日志和應用日志)。日志的配置文件是/etc/systemd/journald.conf。