golang 项目(服务器 A )使用 exec 包在服务器 B 上执行脚本,执行过程中如果 supervisor 重启 golang 项目,服务器 b 上进程就成了僵尸进程, 这个如何解决? 问:golang 项目需要单独接收 supervisor 重启信号?怎么接收?
1
codersdp1 351 天前
os/signal 包处理信号,不过 得先测试下 supervisor 重启发送的是什么信号。
|
2
zhuoyue100 OP @codersdp1 好的
|
3
dzdh 351 天前
重启发送 term 信号。结束进程就行了。至于你说的产生僵尸进程是因为没有监听端口吗?如果有的话不应该新进程起不来么。stop 超过等待时间会强制 kill 进程,你开子进程了?
|
4
zhuoyue100 OP @dzdh 没有监听端口,就是执行一个业务脚本 比如:统计日志信息 当然有一些复杂的业务执行需要很久。但是重启的话我需要将这个进程强杀掉,重新执行
|
5
june4 351 天前
换 systemd
|
6
dzdh 351 天前
@zhuoyue100 #4
killasgroup=true stopasgroup=true stopwaitsecs=600 600 秒没停止强制 kill 非常驻进程不适合用 supervisor 跑 |
7
zhuoyue100 OP @dzdh 好的
|
8
zhuoyue100 OP @june4 这个还没用过,目前都是用的 supervisor 来管理项目
|
9
julyclyde 351 天前
systemd 可以解决这个问题( KillMode=cgroup )
这也是我一直提倡不要用 supervisorD 的原因之一 |
10
zhuoyue100 OP 已经解决了,在 go 项目开启一个协程监听 term 信号,主动释放资源
|
11
dorothyREN 351 天前
systemd 不香吗
|