Linux systemd 詳解
阿新 • • 發佈:2022-04-29
目前幾乎所有的 Linux 發行版已切換到 systemd
。
GitHub:https://github.com/systemd/systemd
官方網站:https://www.freedesktop.org/wiki/Software/systemd/
systemd
系列文章請檢視:https://www.khs1994.com/tags/systemd/
拼寫
systemd
均為小寫,其他任何寫法都不正確。
命令
systemctl
start
stop
restart
kill
reload
sudo systemctl daemon-reload
enable
disable
systemd-analyze
hostnamectl
檢視或者設定當前主機資訊。
$ sudo hostnamectl set-hostname NAME
localectl
控制系統的本地化與鍵盤佈局。
$ sudo localectl set-locale LANG=zh_CN.utf8 | LANG=en_US.UTF-8
timedatectl
設定時間、時區
$ timedatectl set-time TIME
$ timedatectl set-timezone ZONE
# 檢視時區列表 /usr/share/zoneinfo/
$ timedatectl list-timezones
loginctl
檢視當前登入使用者
Unit
主要分為以下幾種
Service
Target
Timer
列出正在執行的 Unit
$ sudo systemctl list-units
列出所有的 Unit
$ sudo systemctl list-units -all
檢視依賴關係
$ sudo systemctl list-dependencies docker.service
Unit 配置檔案
/etc/systemd/system
/usr/lib/systemd/system
列出所有配置檔案
$ sudo systemctl list-unit-files
檢視 Unit 配置檔案
$ sudo systemctl cat docker.service
狀態
enabled
disabled
static
沒有 Installl,無法執行,只能作為其他配置檔案的依賴。
masked
該配置檔案被禁止建立啟動連結
[Unit] 服務的說明
Description= 描述服務
Documentation= 文件地址
Requires= 當前 Unit 依賴的其他 Unit
Wants= 與當前 Unit 配合的其他 Unit
BindsTo= 與 Requires 類似,其指定的 Unit 如果退出,則當前 Unit 也將停止執行
Before= 該欄位指定的 Unit 要啟動,那麼必須在當前 Unit 之後啟動
After= 該欄位指定的 Unit 要啟動,那麼必須在當前 Unit 之前啟動
Conflicts= 該欄位指定的 Unit 不能與當前 Unit 同時啟動
[Service] 服務執行引數的設定
Environment= 設定環境變數
Type=forking 是後臺執行的形式
ExecStartPre= 啟動當前服務之前執行的命令
ExecStart= 服務的具體執行命令
ExecStartPost= 啟動當前服務之後執行的命令
ExecReload= 重啟命令
ExecStop= 停止命令
ExecStopPost= 停止當前服務之後執行的命令
RestartSec= 自動重啟當前服務間隔的秒數
Restart= 定義何種情況 systemd 會自動重啟當前服務,可能的值包括 always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec 定義 systemd 停止當前服務之前等待的秒數
# [Service]的啟動、重啟、停止命令全部要求使用絕對路徑
[Install]
WantedBy= 值為一個或多個 Target,當前 Unit 被 enable 時,符號連結放到 /etc/systemd/system/ 目錄下面
# 以 Target+ .wants 字尾構成的子目錄中
RequireBy=
Alias= 當前 Unit 可用於啟動的別名
Also= 當前 Unit 被 enable 時,啟用該欄位指定的 Unit
Target
Target
是一組 Unit
的集合
日誌管理 journalctl
檢視某個 Unit 的日誌
$ sudo journalctl -u docker.service
定時器單元 取代 Cron
*.timer