使用云助手插件进行服务保活

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

服务或脚本在运行过程中可能会因程序异常、服务器重启、掉电等情况而停止运行,如果不能及时恢复运行,会对线上业务造成损失。本文介绍使用云助手ecs-tool-servicekeepalive插件进行服务保活。

原理介绍

云助手ecs-tool-servicekeepalive插件是基于Linux操作系统的systemd服务实现的。该插件通过定时监测机制,确保在服务或脚本被中断时能够迅速恢复运行,从而保障服务的可靠性和持续性。在使用该插件进行服务保活时,用户需输入服务或程序的启动命令,插件将根据用户输入的命令自动生成systemd服务配置,用户无需手动编辑配置文件。在生成配置文件后,systemd服务组件将启动服务并将其设置为开机自启动。

说明

systemd serviceLinux系统中用来管理服务的组件,例如实现开机自启动和服务意外停止后自启动等。详细介绍,请参见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 插件创建的服务配置文件也会被删除。

使用示例

  1. 准备测试服务脚本。

    该脚本以用户工作目录为/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
  2. (可选)查询服务运行状态。

    运行如下命令,查询服务运行状态。

    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
  3. 启用服务保活。

    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
  4. 查询服务保活及运行状态。

    1. 运行如下命令,查询服务保活状态。

      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
    2. 运行如下命令,查询服务运行状态。

      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
  5. (可选)验证服务保活效果。

    1. 通过手动触发可能导致服务进程停止的情况,验证在发生异常情况下服务进程停止时,云助手是否能够重新启动该进程。

      方式一:重启ECS 实例

      通过控制台重启实例,以模拟服务器异常重启的情况。

      方式二: kill进程

      运行如下命令,结束test-keepalive.sh进程。其中<进程号>替换为通过 ps 命令查询到的程序 PID。

      sudo date && kill -9 <进程号>
    2. 运行如下命令,查询服务运行状态。

      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
  6. 关闭服务保活。

    运行如下命令,关闭服务保活。

    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

相关文档

关于云助手的更多信息,请参见云助手概述