1. 程式人生 > 其它 >Linux systemd 詳解

Linux systemd 詳解

目前幾乎所有的 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

相關連結