宕机自动恢复服务

简介: 在服务或脚本运行过程中,可能会因为程序异常、服务器重启或掉电等原因停止运行,导致业务受损。通过使用云助手插件 `ecs-tool-servicekeepalive`,可以在服务或脚本被中断时快速恢复运行,确保其可靠性和持续性。该插件基于 Linux 系统的 systemd service 实现,用户只需输入启动命令即可自动生成 systemd service 配置,无需手动配置。具体实践包括启动插件、查看配置状态及取消自恢复等功能。

服务或脚本在运行过程中可能会因程序异常、服务器重启、掉电等情况而停止运行,如果不能及时恢复运行,会给线上业务造成损失。您可以通过云助手插件ecs-tool-servicekeepalive,使服务或脚本在被中断时快速恢复运行,保障服务的可靠性和持续性。

自动恢复服务挂网文档:https://help.aliyun.com/zh/ecs/use-cases/automatic-recovery-service?spm=a2c6h.12873639.article-detail.11.5db173dcSqhcLS


方案原理

该方案是基于Linux操作系统的systemd service服务实现的。启用插件ecs-tool-servicekeepalive时,用户只需输入服务/程序的启动命令(例如,python /home/root/main.py)。启用后,该插件会根据用户输入的启动命令,自动生成systemd service配置,实现服务或脚本自启动,无需您手动配置systemd service。

说明

systemd service是Linux系统中的一个组件,可以用来自动管理服务,例如实现开机自启动和服务意外停止后自启动等。详细介绍,请参见systemd官方文档

方案实践

  1. 完成服务或程序等部署后,以root权限启动云助手插件ecs-tool-servicekeepalive
    以root用户运行服务/脚本
    通过指定用户运行服务/脚本
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'cmd'"
  1. cmd:需替换为服务启动命令。例如,脚本执行命令(/bin/bash /home/work/debug/debug.sh )、程序运行命令(python /home/root/main.py)等。
    重要
    脚本或程序文件路径需为根路径。
  2. 执行以下命令,查看服务是否已被配置为自恢复。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "status"
  1. 类似如下回显,表示配置成功。
  2. (可选)如果您需要取消服务/脚本自恢复,可执行如下命令。
sudo acs-plugin-manager --exec --local --plugin ecs-tool-servicekeepalive --params "stop service_name"
  1. service_name:替换为已配置的服务配置名称(即步骤2回显中的service_name列)。

应用示例

  1. 准备环境。
    创建一个/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
  1. 通过命令ps aux |grep debug.sh,发现脚本并未运行。
  2. 启动云助手插件。
sudo acs-plugin-manager --exec --plugin ecs-tool-servicekeepalive --params "start,'/bin/bash /home/work/debug/debug.sh /home/work/debug/debug.log'"
  1. 此时通过命令ps aux | grep debug.sh查看,发现脚本已经在运行(此时进程号为2572)。
  2. 验证脚本是否会自动恢复运行。
    重启ECS脚本正常运行
    Kill进程脚本正常运行
    在控制台重启ECS实例,ECS恢复后,登录实例,执行如下命令。
ps aux |grep debug.sh
  1. 发现服务debug.sh的进程仍正常运行,且进程号更新为764,说明脚本被重新启动过。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
运维 监控 定位技术
故障转移和自动恢复
故障转移和自动恢复
120 1
|
运维 监控 NoSQL
记一次redis主从切换导致的数据丢失与陷入只读状态故障
背景 最近一组业务redis数据不断增长需要扩容内存,而扩容内存则需要重启云主机,在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障,这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从,通过sentinel集群实现故障时的自动主从切换,这套架构已经平稳运行数年,经历住了多次实战的考验。 高可用架构大体如下图所示: 简单说一下sentinel实现高可用的原理: 集群的多个(2n+1,N>1)哨兵会定期轮询redis的所有master/slave节点,如果sentinel集群中超过一半的哨兵判定redis某个节点已主观下线,就会将
|
缓存 容灾 NoSQL
变形记---容灾恢复 ,异常崩溃引发服务器丢档或无法正常运行
最近我给M部门面试服务器主程序开发的职位,我只问他们的架构设计经验,我发现相当一部分5-12年“本应该有足够开发经验”的开发组长,或开发主程序缺乏设计,缺乏容错,缺乏创新,比如一些服务器宕机如何崩溃拉起恢复玩家数据,数据库的异步线程读写如何避免被其他线程写回呢,至少目前能听到合理方案的面试者的回答不多,这也是我想写这篇文章的出发点,以此来分享给大家, 不仅仅是为了应付面试,更是解决实际问题的一种思路。 如题,举例说明:游戏服务器(或者其他业务服务器)正常运行中出现了异常崩溃,可能是异常断电引发,可能是云服务商的软硬件问题引发,这种情况下,你们的服务器架构有没有做灾难恢复处理? 使得
|
监控 安全 数据安全/隐私保护
服务器数据恢复—如何预防服务器故障?发生故障后如何恢复服务器数据?
服务器常见故障: 硬件故障:磁盘、板卡、电源故障等。 软件故障:操作系统崩溃、程序运行错误等。 入侵破坏:加密、删除服务数据等。 不可控力:浸水、火烧、倒塌等。 误操作:格式化、删除、覆盖等。
|
监控
一个 datanode 宕机,恢复流程
一个 datanode 宕机,恢复流程
321 0
|
安全 数据库
事务故障恢复
事务故障恢复
290 0
事务故障恢复
|
SQL 关系型数据库 MySQL
|
运维
服务挂了,怎么自动恢复?
架构设计上,避免单点,使用故障自动转移固然能够保证系统的高可用,是否还有其他的方案,让挂掉的服务自动启动呢,这里给大伙推荐一个常见的运维工具 supervisor。
1055 0