服务起停脚本

当前很多启动停止脚本存在的问题:启动start只是简单的port检查, 停止stop也是野蛮的killall 操作,传参也是多样性,同时也缺乏有效的判断检查服务状态的接口。control脚本可以统一化,加入标准的启停接口,增加启停服务的健壮性。

规范

  • 最小命令集合:start/stop/status
  • 进程启动前必须对依赖进行检查
  • 部署路径以及启动脚本:$/bin/control
  • 进程在15min内coredump次数大于等于5次,supervise需要退出
  • 关闭进程应该对进程名进行一一匹配,不应该仅仅检查pid
  • 合理设置进程启动和关闭的超时时间
  • 非正常状态应该进行捕获并返回有效的排查内容
  • 应该在进程的bin目录下启动服务

程序启动前的自检内容

在程序启动前,需要检查程序所依赖的环境是否存在并满足运行的最低需求,包括但不限于以下内容:

  • 操作系统,内核版本,内核模块
  • 系统参数是否满足需求,如网卡多队列,超线程等
  • 编译器如Java,Python,GCC的版本以及部署路径
  • 权限如数据库授权,上下游授权,第三方依赖授权,网络是否可达
  • 文件以及目录是否存在,数据是否存在
  • 资源是否满足需求,如分配的CPU,MEM,FD,端口等

supervise雪崩防范

程序在短时间内coredump,如果supervise具备拉起服务的能力,那么supervise应该设置最大的自动拉起次数和时间间隔,具体操作参照如下建议:

  • supervise启动进程前,需要按照/proc/sys/kennel/core_pattern设置的路径进行core文件扫描
  • 如果在15min内相关进程的core文件数量大于5,则supervise需要退出,避免再次重启引发服务雪崩
  • 鉴于core文件的体积大小不同,因此supervise不应该承担core文件的清理工作,避免执行耗时较长导致服务启动出现问题

stop功能

  • 首先应该执行程序推荐的stop方式,并确保stop命令具备超时的功能
  • 执行完毕后,应该通过sleep的方式检查并确认进程关闭成功
  • 如果正常方式下未关闭进程,则需要重试至多3次
  • 如果重试依然未生效,则可以采用kill的方式进行
  • stop失败应该提供有效的输出信息便于快速定位
  • 对进程的关闭需要严格进行一一匹配,禁止批量关闭进程,同时需要对关闭进程的数量进行判断,避免误杀

results matching ""

    No results matching ""