服務或指令碼在運行過程中可能會因程式異常、伺服器重啟、掉電等情況而停止運行,如果不能及時恢複運行,會對線上業務造成損失。本文介紹使用雲助手ecs-tool-servicekeepalive外掛程式進行服務保活。
原理介紹
雲助手ecs-tool-servicekeepalive外掛程式是基於Linux作業系統的systemd服務實現的。該外掛程式通過定時監測機制,確保在服務或指令碼被中斷時能夠迅速恢複運行,從而保障服務的可靠性和持久性。在使用該外掛程式進行服務保活時,使用者需輸入服務或程式的啟動命令,外掛程式將根據使用者輸入的命令自動產生systemd服務配置,使用者無需手動編輯設定檔。在組建組態檔案後,systemd服務元件將啟動服務並將其設定為開機自啟動。
systemd service是Linux系統中用來管理服務的組件,例如實現開機自啟動和服務意外停止後自啟動等。詳細介紹,請參見systemd官方文檔。
使用說明
啟用服務保活
完成服務部署後,以root 使用者運行雲助手外掛程式ecs-tool-servicekeepalive。
以root使用者運行服務
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'<cmd>'"<cmd>:需替換為服務啟動命令。使用樣本如下。
shell 程式:(
/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh)。python 程式:(
python /home/root/main.py)。
通過指定使用者運行服務
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,execstart='<cmd>',user=<user_name>,group=<group_name>"<cmd>:需替換為服務啟動命令。使用樣本如下。
shell 程式:(
/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh)。python 程式:(
python /home/root/main.py)。
<user_name>:替換為服務啟動並執行使用者名稱。執行
cut -d: -f1 /etc/passwd可查看已建立的使用者。<group_name>:替換為服務啟動並執行使用者組名。執行
cut -d: -f1 /etc/group可查看已建立的使用者組。
查詢服務保活狀態
運行如下命令,查詢是否啟用服務保活。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"回顯資訊樣本如下,表明服務保活啟用成功。
service_name execstart user group status
ecs_keepalive_1744262359.service /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log active (running) since Thu 2025-04-10 13關閉服務保活
如果您需要取消服務保活,可執行如下命令。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop <service_name>"<service_name>:替換為已配置的服務配置名稱(即查詢服務保活狀態步驟回顯資訊中的service_name列)。
關閉服務保活時,會結束服務進程,並同時取消服務開機自啟動,由ecs-tool-servicekeepalive 外掛程式建立的服務組態檔也會被刪除。
使用樣本
準備測試服務指令碼。
該指令碼以使用者工作目錄為
/home/ecs-user為例,請根據實際工作目錄替換指令碼中的工作目錄。# 在/home/ecs-user目錄建立keepalive-simple檔案夾,並在該檔案夾下建立test-keepalive.sh指令碼 sudo mkdir -p /home/ecs-user/keepalive-simple && \ sudo tee /home/ecs-user/keepalive-simple/test-keepalive.sh > /dev/null << 'EOF' #!/bin/bash # 每秒列印一行日誌到使用者指定的記錄檔中。 while true do sudo echo "$(date '+%Y-%m-%d %H:%M:%S') progress is alive" >> $1 sleep 1 done EOF # 為指令碼添加可執行許可權 sudo chmod +x /home/ecs-user/keepalive-simple/test-keepalive.sh(可選)查詢服務運行狀態。
運行如下命令,查詢服務運行狀態。
ps aux | grep test-keepalive.sh回顯結果樣本如下,表明此時服務未運行。
ecs-user 2207 0.0 0.0 221528 916 pts/0 S+ 11:34 0:00 grep --color=auto test-keepalive.sh啟用服務保活。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log'"回顯資訊樣本如下,表明服務保活啟用成功。
Created symlink /etc/systemd/system/multi-user.target.wants/ecs_keepalive_1744256544.service → /etc/systemd/system/ecs_keepalive_1744256544.service. Start systemd service for "/bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log" success查詢服務保活及運行狀態。
運行如下命令,查詢服務保活狀態。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"回顯結果樣本如下,表明服務保活啟用成功,且當前服務為運行中狀態。
service_name execstart user group status ecs_keepalive_1744256544.service /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log active (running) since Thu 2025-04-10 11運行如下命令,查詢服務運行狀態。
ps aux | grep test-keepalive.sh回顯結果樣本如下,表明服務為運行中狀態。
root 3144 0.0 0.0 222200 3420 ? Ss 11:42 0:00 /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log ecs-user 6841 0.0 0.0 221660 968 pts/0 S+ 11:49 0:00 grep --color=auto test-keepalive.sh
(可選)驗證服務保活效果。
通過手動觸發可能導致服務進程停止的情況,驗證在發生異常情況下服務進程停止時,雲助手是否能夠重新啟動該進程。
方式一:重啟ECS 執行個體
通過控制台重啟執行個體,以類比伺服器異常重啟的情況。
方式二: kill進程
運行如下命令,結束
test-keepalive.sh進程。其中<進程號>替換為通過 ps 命令查詢到的程式 PID。sudo date && kill -9 <進程號>運行如下命令,查詢服務運行狀態。
ps aux | grep test-keepalive.sh回顯結果樣本如下,表明服務為運行中狀態。
root 33061 0.0 0.0 222200 3504 ? Ss 13:19 0:00 /bin/bash /home/ecs-user/keepalive-simple/test-keepalive.sh /home/ecs-user/keepalive-simple/test-keepalive.log ecs-user 34558 0.0 0.0 221660 2556 pts/0 S+ 13:23 0:00 grep --color=auto test-keepalive.sh
關閉服務保活。
運行如下命令,關閉服務保活。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop ecs_keepalive_1744256544.service"回顯資訊樣本如下,說明服務保活配置關閉成功。
service check ok, file:ecs_keepalive_1744256544.service is valid Removed /etc/systemd/system/multi-user.target.wants/ecs_keepalive_1744256544.service. stop service ok, service:ecs_keepalive_1744256544.service is stopped and removed
相關文檔
關於雲助手的更多資訊,請參見雲助手概述。