本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
服务或脚本在运行过程中可能会因程序异常、服务器重启、掉电等情况而停止运行,如果不能及时恢复运行,会对线上业务造成损失。本文介绍使用云助手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
相关文档
关于云助手的更多信息,请参见云助手概述。