上期我們說到sysv的規范,創建以及示例,那么我們今天就來講講Systemd的原生服務配置。
?為何要遷移到Systemd原生服務?
盡管規范化的SysV腳本可臨時解決問題,但可能存在以下缺陷:
- 效率低下:串行啟動拖慢系統初始化。
- 依賴管理脆弱:靜態依賴無法處理動態資源(如網絡連接就緒)。
- 功能缺失:無自動重啟、資源限制、日志聚合等特性。
- 舊時代產物:sysv相比與system原生服務相對更加老舊,為了兼容system可能會導致各種不便利。
?Systemd原生服務配置最佳實踐
1. Systemd服務文件基礎
創建/etc/systemd/system/my_service.service。
[Unit]Description=My Custom ServiceAfter=network.target syslog.target# 明確依賴順序Requires=network.target# 硬依賴(失敗則終止)
[Service]Type=simple# 主進程類型(simple/forking)ExecStart=/usr/bin/my_daemon --config /etc/my.confExecStop=/bin/kill -TERM$MAINPID# 可選,默認發送SIGTERMRestart=on-failure# 自動重啟策略User=appuser# 降權運行Group=appgroupEnvironment=DEBUG=false# 環境變量
[Install]WantedBy=multi-user.target# 默認啟用級別
1.1 服務類型(Type)

1.2 自動重啟策略(Restart)
Restart=always# 無條件重啟Restart=on-failure# 退出碼非0時重啟RestartSec=5# 重啟前等待時間
1.3 資源限制
MemoryLimit=512M# 內存限制CPUQuota=80%# CPU時間配額LimitNOFILE=65535# 文件描述符數
1.4 日志管理
StandardOutput=journal# 默認輸出到JournaldStandardError=journal# 或自定義日志文件(需配合日志輪轉)StandardOutput=file:/var/log/my_service.log
2. Systemd服務啟動
那么,當我已經創建好了/etc/systemd/system/my_service.service并寫好了內容,我該如何啟動這個服務?
2.1 重載Systemd配置
sudosystemctl daemon-reload
必須操作:跳過此步驟會導致Systemd無法識別新服務配置!
2.2 啟動服務
sudosystemctl start my_service
服務名規則:my_service對應/etc/systemd/system/my_service.service的文件名(無需加.service后綴)。
2.3 檢查服務狀態
systemctlstatus my_service
關鍵輸出解讀:
my_service.service - My Custom Service
Loaded: loaded (/etc/systemd/system/my_service.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-10 1500 UTC; 5s ago # 服務已成功運行
Main PID: 1234 (my_daemon)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/my_service.service
└─1234 /usr/bin/my_daemon --config /etc/my.conf
2.4 設置開機自啟
sudo systemctlenablemy_service
輸出示例:
Createdsymlink/etc/systemd/system/multi-user.target.wants/my_service.service → /etc/systemd/system/my_service.service
2.5 實時查看服務日志
journalctl-u my_service -f
u:過濾特定服務的日志
f:實時跟蹤(類似tail -f)
2.6 停止服務
sudosystemctl stop my_service
2.7 重啟服務
sudosystemctl restart my_service
3. 完整流程示例
# 創建服務文件sudo nano /etc/systemd/system/my_service.service
# 寫入配置內容并保存后...sudo systemctl daemon-reloadsudo systemctl start my_servicesudo systemctlenablemy_servicesystemctl status my_service
?總結:SysV與Systemd對比差異1. 服務啟動方式
- SysV:采用串行啟動,服務按運行級別(runlevel)順序執行腳本,每個服務需等待前一個完成再啟動。運行級別通過/etc/rc.d/rcN.d目錄下的腳本控制(N為0-6)。
- Systemd:支持并行啟動,通過依賴關系和單元(unit)定義實現多服務同時啟動,顯著縮短啟動時間。例如,基于socket激活機制,服務無需完全啟動即可響應請求。
2. 服務管理模型
- SysV:服務以獨立腳本形式存儲在/etc/init.d目錄,依賴service或chkconfig命令管理。服務狀態需手動檢查(如ps命令)。
- Systemd:服務以單元文件(.service)定義,集中在/usr/lib/systemd/system目錄,通過systemctl統一管理。支持服務狀態監控、日志集成(journalctl)及自動重啟策略。
3. 依賴關系處理
- SysV:依賴關系通過腳本中的條件判斷硬編碼實現,靈活性差,容易因順序錯誤導致啟動失敗。
- Systemd:在單元文件中通過After、Requires等指令明確定義依賴關系,系統自動解析并優化啟動順序,確保服務按需加載。
4. 優缺點總結

?EM系列儲能邊緣智能網關
EM系列儲能邊緣智能網關是ZLG致遠電子專為新能源儲能系統設計的一款高性能、多接口通訊管理設備,可在儲能系統應用中作為邊緣EMS(能源管理系統)總控、通訊管理機、規約轉換器或BAU(電池管理總控)使用。該系列產品集成豐富的外設接口,支持各類BMS、PCS、空調、電表、屏顯等設備的通訊傳輸,且軟件上支持RT-Linux、Ubuntu等操作系統,支持IEC-61850/IEC-104/EtherCAT等專用協議,可廣泛滿足各類儲能系統的本地能源管理應用需求。
-
配置
+關注
關注
1文章
194瀏覽量
19463 -
智能網關
+關注
關注
6文章
924瀏覽量
51827
發布評論請先 登錄
云原生技術概述 云原生火爆成為升職加薪核心必備
Linux使用Systemd管理進程服務
Linux使用Systemd管理進程服務
如何在 Linux 上從 NetworkManager 切換為 systemd
i.M8XMQ開發板如何通過Systemd服務實現應用自啟
解析云原生技術發展趨勢及實踐應用
云原生技術下的華為云DevOps實踐之路
誠邀報名|在開發者大會,洞悉云原生技術落地最佳實踐
Systemd是什么?Systemd Service配置文件詳解
Linux網絡管理的關鍵技術和最佳實踐
【技術分享】正確編寫SysV Init腳本以實現Systemd兼容(上)
技術分享| 什么是Systemd
【技術分享】Systemd原生服務配置最佳實踐(下)
評論