2024年9月9日 星期一

[Linux]如何將腳本(shell script)轉換到系統管理服務器(systemd service)來運行?


在Linux中,shell腳本(shell script)常用於運行各種自動化的流程,包含API串接,設置和啟動應用服務等等,腳本語法也相對易學易讀,因此頗受大部分使用者的喜愛。但若需要讓shell腳本能長期穩定運行,則建議將shell腳本轉換到系統管理服務器(systemd service)來運行,將有下列幾個優點,使得該服務的運作可有效被systemd管理。

1.Linux系統啟動後,可自動啟動。
2.服務異常退出後,可自動重啟。
3.透過journalctl集中管理該服務的日誌(log),可用於問題測試和偵錯。

上述影片即是一個實際案例,其利用shell腳本將樹莓派的溫度和電壓數值以固定週期傳到influxdb中,同時若溫度過高或電壓過低,則會藉由line notify發出提醒訊息,期望藉由該服務長期監控樹莓派的運作是否穩定,若有異常進程導致溫度過高或電壓過低,則可立刻查閱日誌並及時處理。話不多說,一起來看看如何將該shell腳本轉換到systemd service中。

a.利用nano新增systemd文件

sudo nano /etc/systemd/system/pi_tem_vol_detec.service

b.在該文件中,寫入下列內容

[Unit]
Description=Script to monitor Raspberry Pi voltage and temperature
After=network.target
[Service]
Type=simple
ExecStart=/your_path/pi_tem_vol_detec.sh
[Install]
WantedBy=multi-user.target

其中 /your_path/pi_tem_vol_detec.sh為shell腳本置放的路徑,完成後,儲存該文件並退出。

c.設定該文件的權限,並重新載入systemd,以添加該服務

sudo chmod 644 /etc/systemd/system/pi_tem_vol_detec.service
sudo systemctl daemon-reload

d.啟動該服務(pi_tem_vol_detec.service),並查看狀態

sudo systemctl start pi_tem_vol_detec
sudo systemctl status pi_tem_vol_detec

e.進一步將該服務設定為,開機時自動啟動

sudo systemctl enable pi_tem_vol_detec

沒有留言:

張貼留言