Systemd#
systemd 是一套 Linux 系統的基本建構區塊。它提供以 PID 1 身分執行的系統及服務管理程式,並啟動系統的其餘部分。
Introduction#
systemd 提供積極的並行化功能,使用套接字和 D-Bus 激活來啟動服務,提供守護程序的按需啟動,使用 Linux 控制組跟踪進程,維護掛載和自動掛載點,並實現基於事務依賴關係的精心設計服務控制邏輯。systemd 支援 SysV 和 LSB init 腳本,並可作為 sysvinit 的替代品。 其他部分包括日誌守護程式、用於控制基本系統配置(如主機名、日期、地區設定)的實用程式、維護登入使用者清單以及正在運行的容器和虛擬機器、系統帳戶、運行時目錄和設置,以及用於管理簡單網路配置、網路時間同步、日誌轉發和名稱解析的守護程式。
Install#
大部分的linux發行版已內建,如沒有可以使用套件管理軟體安裝。
$ sudo apt-get install systemdSetting 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.targetOperate#
重新載入 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.execReference#
Official docs: