上期我們說到sysv的規(guī)范,創(chuàng)建以及示例,那么我們今天就來講講Systemd的原生服務(wù)配置。
?為何要遷移到Systemd原生服務(wù)?
盡管規(guī)范化的SysV腳本可臨時解決問題,但可能存在以下缺陷:
- 效率低下:串行啟動拖慢系統(tǒng)初始化。
- 依賴管理脆弱:靜態(tài)依賴無法處理動態(tài)資源(如網(wǎng)絡(luò)連接就緒)。
- 功能缺失:無自動重啟、資源限制、日志聚合等特性。
- 舊時代產(chǎn)物:sysv相比與system原生服務(wù)相對更加老舊,為了兼容system可能會導(dǎo)致各種不便利。
?Systemd原生服務(wù)配置最佳實踐
1. Systemd服務(wù)文件基礎(chǔ)
創(chuàng)建/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# 可選,默認(rèn)發(fā)送SIGTERMRestart=on-failure# 自動重啟策略User=appuser# 降權(quán)運行Group=appgroupEnvironment=DEBUG=false# 環(huán)境變量
[Install]WantedBy=multi-user.target# 默認(rèn)啟用級別
1.1 服務(wù)類型(Type)

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

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

【技術(shù)分享】Systemd原生服務(wù)配置最佳實踐(下)
評論