A simple guide for Linux systemd service ...
Simple Systemd Service Guide
主題
- Systemd介紹
- Systemd基本操作
- 怎樣編寫_service_.service文件
- 怎樣部署service
Systemd介紹
- Linux OS的系統和服務管理者
- 相容SysV初始化腳本(init scripts)
- 提供如下功能特性:
- 系統啟動時系統服務的並行啟動
- Daemon程式的按需激活
- 支持系統狀態快照(snapshots)
- 基於依賴的服務控制邏輯
- systemd取代RHL7的Upstart,作為預設的init系統
Systemd基本操作
啟動服務
systemctl start name.service停止服務
systemctl stop name.service重啟服務
systemctl restart name.service重載配置
systemctl reload name.service檢查服務狀態
systemctl status name.service
輸出所有服務狀態
systemctl list-units --type service --all使能服務
systemctl enable name.service禁止服務
systemctl disable name.service列出所有服務並檢查是否使能
systemctl list-unit-files --type service
怎樣編寫name.service文件
name.service文件組成
- [Unit]
- 包含一般的選項,不依賴於單元類型(unit type)
- 選項:提供單元描述,指定單元行為,設置對其他單元的依賴關係
- [unit type]
- 如果一個單元有特定的指令,則這些指令被組合在以單元類型命名的塊下。
比如,service單元文件包含在[Service]塊中。
- 如果一個單元有特定的指令,則這些指令被組合在以單元類型命名的塊下。
- [Install]
- 包含systemctl enable和disable命令使用的單元安裝信息
重要的[Unit]塊選項
Description
單元有意義的描述信息,systemctl status命令輸出中顯示該文本信息。
Documentation
提供該單元的URI引用文件列表。
After
定義單元的啟動順序。該單元只在After指定的單元處於激活狀態後才啟動。
Before選擇與After功能相反。
Requires
配置與其他單元的依賴關係。在Requires中的單元與該單元一起激活。
如果任何需要的單元啟動失敗,這個單元就不會被激活。
Wants
配置比Requires弱的依賴關係。
如果任何列出的單元沒有成功啟動,也不會影響該單元的激活。
建議用於建立定製單元依賴關係。
Conflicts
配置反向的依賴關係,即與Requires配置相反的依賴。
重要的[Service]塊選項
Type
配置單元啟動類型。影響ExecStart和其他相關選項的功能。
simple
預設選項。ExecStart啟動的進程為服務的主進程。
forking
ExecStart啟動的進程創建一個子進程作為服務的主進程。啟動完成後父進程退出。
oneshot
與simple相似,但是在啟動後續的單元之前進程退出。
dbus
與simple相似,但是僅在主進程得到D-bus名稱之後才啟動後續的單元。
notify
與simple相似,但是僅在通過sd_notify()函數發送通知消息後才啟動後續的單元。
idle
與simple相似,但是直到所有job完成後,才真正執行服務的二進位程式,這避免與服務shell的狀態輸出信息混淆。ExecStart
當單元啟動時,執行該選項指定的命令或腳本。
ExecStop
當單元停止時,執行該選項指定的命令或腳本。
ExecReload
當單元重裝時,執行該選項指定的命令或腳本。
Restart
如果該選項使能,當服務進程退出時,服務重啟。作為systemctl stop命令的異常處理。
RemainAfterExit
如果該選項設置為True,即使服務所有的進程退出,這個服務也被認為處於激活狀態(active)。
預設是False。
當Type=oneshort配置時,這個選項有特殊的用處。
重要的[Install]塊選項
Alias
提供單元的額外名稱,以空格隔開。除了systemctl enable,大部分sytemctl命令可以使用別名帶去真正的單元名稱。
RequiredBy
依賴於該單元的其他單元列表。
當該單元使能時,RequiredBy中的單元就會生成依賴於該單元的Require依賴關係。WantedBy
弱依賴於該單元的其他單元列表。
當該單元使能時,WantedBy中的單元就會生成依賴於該單元的Want依賴關係。Also
指定和該單元一起安裝或卸載的其他單元列表。
DefaultInstance
限定的實例化單元。即該選項指定了該單元使能的預設實例。
Limited to instantiated units, this option specifies the default instance for which the unit is enabled.
例子:自定義中斷綁核服務
[Unit]
Description=Configure common_affinity service for system!
After=network.target
[Service]
Type=oneshot
ExecStart=/etc/init.d/common_affinity
ExecStop=/home/zxuss/affinity/superstop.sh
RemainAfterExit=True
[Install]
WantedBy=multi-user.target
怎樣部署service
以自定義中斷綁核服務為例子:
1.將name.service文件拷貝到/usr/lib/systemd/system/目錄下
cp -f ${work_path}/common_affinity.service /usr/lib/systemd/system/
2.將服務啟動腳本拷貝到/etc/init.d/目錄,或者其他目錄
cp -f ${work_path}/common_affinity /etc/init.d/
3.如果已經部署了name.service服務,則先禁止該服務,然後重新使能該服務
systemctl disable common_affinity.service
systemctl reenable common_affinity.service
4.如果沒有部署過name.service服務,則直接使能name.service服務
systemctl enable common_affinity.service
參考文檔:
Managing Services with systemd
systemd.service — Service unit configuration
How To Use Systemctl to Manage Systemd Services and Units