Systemd#

systemd 是一套 Linux 系統的基本建構區塊。它提供以 PID 1 身分執行的系統及服務管理程式,並啟動系統的其餘部分。


Introduction#

systemd 提供積極的並行化功能,使用套接字和 D-Bus 激活來啟動服務,提供守護程序的按需啟動,使用 Linux 控制組跟踪進程,維護掛載和自動掛載點,並實現基於事務依賴關係的精心設計服務控制邏輯。systemd 支援 SysV 和 LSB init 腳本,並可作為 sysvinit 的替代品。 其他部分包括日誌守護程式、用於控制基本系統配置(如主機名、日期、地區設定)的實用程式、維護登入使用者清單以及正在運行的容器和虛擬機器、系統帳戶、運行時目錄和設置,以及用於管理簡單網路配置、網路時間同步、日誌轉發和名稱解析的守護程式。


Install#

大部分的linux發行版已內建,如沒有可以使用套件管理軟體安裝。

$ sudo apt-get install systemd

Setting in up#

Systemd 設定檔全部放在

/etc/systemd/system/

建立檔案時權限要給予讀寫權限

Systemd 設定檔範本

[Unit]
# 服務名稱
Description=Your Server

# 服務相關文件
# Documentation=https://example.com
# Documentation=man:nginx(8)

# 設定服務啟動的先後相依姓,例如在網路啟動之後:
# After=network.target

[Service]
# 行程類型
Type=simple

# 啟動服務指令
ExecStart=/opt/your_command

# 服務行程 PID(通常配合 forking 的服務使用)
# PIDFile=/run/your_server.pid

# 啟動服務前,執行的指令
# ExecStartPre=/opt/your_command

# 啟動服務後,執行的指令
# ExecStartPost=/opt/your_command

# 停止服務指令
# ExecStop=/opt/your_command

# 停止服務後,執行的指令
# ExecStopPost=/opt/your_command

# 重新載入服務指令
# ExecReload=/opt/your_command

# 服務終止時自動重新啟動
Restart=always

# 重新啟動時間格時間(預設為 100ms)
# RestartSec=3s

# 啟動服務逾時秒數
# TimeoutStartSec=3s

# 停止服務逾時秒數
# TimeoutStopSec=3s

# 執行時的工作目錄
# WorkingDirectory=/opt/your_folder

# 執行服務的使用者(名稱或 ID 皆可)
# User=myuser

# 執行服務的群組(名稱或 ID 皆可)
# User=mygroup

# 環境變數設定
# Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"

# 服務輸出訊息導向設定
# StandardOutput=syslog

# 服務錯誤訊息導向設定
# StandardError=syslog

# 設定服務在 Syslog 中的名稱
# SyslogIdentifier=your-server

[Install]
WantedBy=multi-user.target

Operate#

重新載入 Systemd 設定檔

$ sudo systemctl daemon-reload

啟動

$ sudo systemctl start <name>.service

停止

$ sudo systemctl stop <name>.service

重啟

$ sudo systemctl restart <name>.service

查看狀態

$ sudo systemctl status <name>.service

開機開機自動啟動

$ sudo systemctl enable <name>.service

取消開機自動啟動

$ sudo systemctl disable <name>.service

查詢 Systemd 服務單位設定檔說明文件

man systemd.unit
man systemd.service
man systemd.exec

Reference#

Official docs:

systemd