临时 VM 重建后服务自己恢复:一次自愈脚本实战

举报
yd_228883889 发表于 2026/10/28 17:21:38 2026/10/28
【摘要】 背景:重建一次,服务就丢了一半服务跑在一台临时 VM 上,机器随时可能被回收重建。一次重建后,隧道服务起不来,站点报 530 约 35 分钟。查下来不是应用本身坏了,而是重建把不持久目录里的东西清掉了,隧道二进制没了,服务一直在崩溃循环。第一个坑:只看“在运行”是不够的原来的自愈检查只看服务是不是 active,结果服务卡在 activating 也被当成正常,漏检了。改成看子状态必须等于 ...
  1. 背景:重建一次,服务就丢了一半
    服务跑在一台临时 VM 上,机器随时可能被回收重建。一次重建后,隧道服务起不来,站点报 530 约 35 分钟。查下来不是应用本身坏了,而是重建把不持久目录里的东西清掉了,隧道二进制没了,服务一直在崩溃循环。
  2. 第一个坑:只看“在运行”是不够的
    原来的自愈检查只看服务是不是 active,结果服务卡在 activating 也被当成正常,漏检了。改成看子状态必须等于 running,才算健康。这个改动很小,但正是它让漏检变成了能发现问题。
  3. 第二个坑:恢复要用的东西,必须放在持久区
    隧道二进制原来只放在系统目录,重建就丢。改成在工作目录里留一份备份,缺失就自动恢复再重启。依赖也一样:包管理器在重建后会丢,基础运行环境还在基座镜像里,自愈脚本里就要加上包管理器缺失自动重装,否则服务代码在、工具不在,还是起不来。
  4. 第三个坑:权限
    有一次备份文件只给了所有者可执行权限,服务用户根本执行不了。改成 755 后才正常。这类问题报错往往不直观,排查时先看权限和执行用户,别只看服务日志。
  5. 验证:模拟丢失,实测自愈通过
    改完后模拟一次二进制丢失:自愈脚本先从备份恢复,再重启隧道服务,最后本地端口和公网域名都恢复正常响应。自愈有没有用,不能只看脚本跑没跑,要看服务是不是真的恢复了。
    结尾
    自愈脚本的关键不是写得多复杂,而是两点:恢复所需的东西都要放在重建后还在的地方;健康判断要用真实状态,不要用“进程在”代替“服务可用”。临时环境尤其如此,先把恢复路径做实,再谈别的优化。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。