服务或脚本在运行过程中可能会因程序异常、服务器重启、掉电等情况而停止运行,如果不能及时恢复运行,会给线上业务造成损失。您可以通过云助手插件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 "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脚本正常运行
Kill进程脚本正常运行
在控制台重启ECS实例,ECS恢复后,登录实例,执行如下命令。
ps aux |grep debug.sh
- 发现服务
debug.sh
的进程仍正常运行,且进程号更新为764,说明脚本被重新启动过。