天天看點

Linux systemd的service配置說明及舉例

作者:冷松

systemd服務檔案包含[Unit]、[Service]和[Install]三個節,各自包含不同作用的配置參數。

[Unit]:

- Description: 服務描述,用于systemctl status輸出。例如:Description=My Service

- Documentation: 服務文檔路徑。例如:Documentation=man:my_service(1)

- Requires: 目前服務依賴的其他服務。例如:Requires=network.target

- Wants: 目前服務常見的依賴服務。例如:Wants=syslog.service

- After: 定義啟動順序,表明該服務應在另一服務之後啟動。例如:After=rc-local.service

- Before: 定義啟動順序,表明該服務應在另一服務之前啟動。例如:Before=poweroff.target

[Service]:

- Type: 定義啟動類型(simple、forking、oneshot、dbus、notify等)。例如:Type=simple。

simple: 預設值,執行ExecStart指定的指令啟動主程序。主程序退出時,服務停止。

forking: 執行ExecStart啟動主程序,主程序随後将調用fork()成為背景程序。主程序退出時,服務不會停止。

oneshot: 執行ExecStart指令,并立即停止服務。這種類型的服務啟動後不會繼續運作。

dbus: 同時啟動ExecStart定義的指令和D-Bus一樣的守護程序。D-Bus 守護程序啟動dbus-daemon。當D-Bus守護程序退出時,服務停止。

notify: 執行ExecStart指令啟動主程序。當程序啟動後,會向systemd發送一個就緒通知。然後服務停止,但目前程序會繼續運作。這通常用于類型為oneshot的服務,以異步的方式啟動服務。

idle: 當有其他任務完成時執行ExecStart指令。這確定該服務會在cpu空閑時啟動。

- ExecStart: 服務啟動指令。例如:ExecStart=/usr/sbin/my_service。

- ExecStartPre: 啟動前執行的指令。例如:ExecStartPre=/bin/echo Starting my_service

- ExecStartPost: 啟動後執行的指令。例如:ExecStartPost=/bin/echo Started my_service

- ExecReload: 服務重載指令。例如:ExecReload=/bin/kill -HUP $MAINPID

- ExecStop: 服務停止指令。例如:ExecStop=/bin/kill $MAINPID

- ExecStopPost: 停止後執行的指令。例如:ExecStopPost=/bin/echo Stopped my_service

- Restart: 定義何種條件下會自動重新開機服務。例如:Restart=always

- RestartSec: 自動重新開機的間隔。例如:RestartSec=30

- LimitMEMLOCK: 限制最大可鎖定記憶體大小。例如:LimitMEMLOCK=infinity 相當于/etc/security/limits.conf裡配置 [程序名] hard memlock unlimited,而不需要重新開機

- OOMScoreAdjust: 定義OOM優先級。例如:OOMScoreAdjust=-1000,取值範圍為[-1000,1000] 值越小越容易被作業系統oom kill.相當于echo 某個數值 > /proc/PID/oom_score_adj

- NoNewPrivileges: 設定是否允許擷取附權重限。例如:NoNewPrivileges=true

[Install]節:

- WantedBy: 表示目前服務被哪個target激活,在該target啟動時會啟動目前服務。例如:WantedBy=multi-user.target

- RequiredBy: 目前服務被哪個服務激活,目前服務通常作為依賴服務存在。例如: RequiredBy=my_other_service.service

- Alias: 為服務建立别名,可用于啟動服務。例如:Alias=my_service.target以下是一個配置執行個體:

[Unit]
Description=My Service
After=network.target

[Service] 
ExecStart=/usr/sbin/my_service 
ExecStartPre=/bin/echo Starting my_service
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
LimitMEMLOCK=infinity
OOMScoreAdjust= -500

[Install]
WantedBy=multi-user.target
Alias=my_service.target
           

這個服務檔案定義了一個名為My Service的服務,它在網絡啟動後啟動,啟動指令為/usr/sbin/my_service,在啟動前會輸出一條提示,配置了重載和重新開機功能,沒有記憶體鎖定限制,并設定了中等的OOM優先級,屬于multi-user.target,有一個别名my_service.target。希望上述解釋能幫助您全面了解systemd服務檔案各參數的作用和用法。如果您在編寫和配置服務檔案時還有疑問,歡迎與我聯系。我将提供更加詳細和深入的講解,以及各種配置執行個體來增強您的實踐技能

繼續閱讀