service 自我升级遇到的问题

升级思路

  1. 服务先创建子进程执行升级脚本
  2. 脚本停止服务
  3. 脚本复制替换需要更新的文件
  4. 脚本再次启动服务

执行起来,发现脚本停止服务后,立马跟随服务一起停止。所以只能停止服务,后续步骤无法完成。无论是linux 还是windows,都有这种问题。

linux 和windows的服务思路

  • windows 创建一个服务进程,然后利用服务进程守护work进程
  • linux 服务进程无需创建,利用systemd守护work进程

问题原因

windows
服务进程创建work进程时,一般都会创建job,同时设置JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
效果是,只要服务进程退出,那么它创建的work进程也会全部退出,连同work进程的子进程,孙进程。。。
脚本随着work进程一并退出的原因就在这
其实也很好解决,利用JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 就可以让work进程的子进程自动脱离Job,从而避免被杀
或者创建work进程时加上JOB_OBJECT_LIMIT_BREAKAWAY_OK,work进程创建子进程(升级)的时候设定CREATE_BREAKAWAY_FROM_JOB,也可以脱离Job避免被杀

linux
systemd(1)创建work进程时,默认是control-group,和windows的job作用类似
效果是,只要work进程退出,那么它创建的子进程,孙进程。。。也会全部退出
解法也很简单
设置 KillMode=process 就可以让work进程的子进程避免被杀
但是work的子进程管理就需要work进程自己精细控制了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值