首页 > 编程学习 > service 自我升级遇到的问题

service 自我升级遇到的问题

发布时间:2022/10/1 8:25:30

升级思路

  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进程的子进程,孙进程。。。
脚本随着服务进程一并退出的原因就在这
其实也很好解决,利用JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 就可以让work进程的子进程自动脱离Job,从而避免被杀
或者JOB_OBJECT_LIMIT_BREAKAWAY_OK,work进程创建子进程(升级)的时候设定CREATE_BREAKAWAY_FROM_JOB,也可以脱离Job避免被杀

linux
systemd(1)创建work进程时,默认是control-group,和windows的job作用类似
效果是,只要work进程退出,那么它创建的子进程,孙进程。。。也会全部退出
脚本随着服务进程一并退出的原因就是这个
设置 KillMode=process 就可以让work进程的子进程避免被杀
但是子进程管理就需要work进程自己精细控制了

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号