服務或指令碼在運行過程中可能會因程式異常、伺服器重啟、掉電等情況而停止運行,如果不能及時恢複運行,會給線上業務造成損失。您可以通過雲助手外掛程式ecs-tool-servicekeepalive
,使服務或指令碼在被中斷時快速恢複運行,保障服務的可靠性和持久性。
方案原理
該方案是基於Linux作業系統的systemd service服務實現的。啟用外掛程式ecs-tool-servicekeepalive
時,使用者只需輸入服務/程式的啟動命令(例如,python /home/root/main.py
)。啟用後,該外掛程式會根據使用者輸入的啟動命令,自動產生systemd service配置,實現服務或指令碼自啟動,無需您手動設定systemd service。
systemd service是Linux系統中的一個組件,可以用來自動管理服務,例如實現開機自啟動和服務意外停止後自啟動等。詳細介紹,請參見systemd官方文檔。
方案實踐
完成服務或程式等部署後,以root許可權啟動雲助手外掛程式
ecs-tool-servicekeepalive
。以root使用者運行服務/指令碼
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'cmd'"
cmd:需替換為服務啟動命令。例如,指令碼執行命令(
/bin/bash /home/work/debug/debug.sh
)、程式運行命令(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:需替換為服務啟動命令。例如,指令碼執行命令(
/bin/bash /home/work/debug/debug.sh
)、程式運行命令(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"
類似如下回顯,表示配置成功。
(可選)如果您需要取消服務/指令碼自恢複,可執行如下命令。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop service_name"
service_name:替換為已配置的服務配置名稱(即步驟2回顯中的service_name列)。
應用樣本
準備環境。
建立一個
/home/work/debug
檔案夾,並在該檔案夾下建立debug.sh
指令碼,該指令碼會每秒列印一行日誌到使用者指定的記錄檔中。sudo mkdir -p /home/work/debug && \ sudo tee /home/work/debug/debug.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
通過命令
ps aux |grep debug.sh
,發現指令碼並未運行。啟動雲助手外掛程式。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/work/debug/debug.sh /home/work/debug/debug.log'"
此時通過命令
ps aux | grep debug.sh
查看,發現指令碼已經在運行(此時進程號為2572)。驗證指令碼是否會自動回復運行。
重啟ECS指令碼正常運行
在控制台重啟ECS執行個體,ECS恢複後,登入執行個體,執行如下命令。
ps aux |grep debug.sh
探索服務
debug.sh
的進程仍正常運行,且進程號更新為764,說明指令碼被重新啟動過。Kill進程指令碼正常運行
執行如下命令,通過尋找到
debug.sh
的進程號。ps aux |grep debug.sh
類似如下回顯,2572即為
debug.sh
進程號。執行如下命令,kill掉
debug.sh
進程。sudo date && kill -9 進程號
再次執行如下命令,發現
debug.sh
仍在運行且進程號更新為4220,說明指令碼被重新啟動過。ps aux |grep debug.sh
相關文檔
隨著業務規模的增長,資料請求和並發訪問量增大、您可以部署多台ECS搭建一個具備可用性區域層級的故障災備能力的服務,保障資料的可用性和持久性。具體操作,請參見部署高可用。