supervisor 重启 golang 项目时产生僵尸进程怎么办

130 天前
 zhuoyue100

golang 项目(服务器 A )使用 exec 包在服务器 B 上执行脚本,执行过程中如果 supervisor 重启 golang 项目,服务器 b 上进程就成了僵尸进程, 这个如何解决? 问:golang 项目需要单独接收 supervisor 重启信号?怎么接收?

1018 次点击
所在节点    Go 编程语言
11 条回复
codersdp1
130 天前
os/signal 包处理信号,不过 得先测试下 supervisor 重启发送的是什么信号。
zhuoyue100
130 天前
@codersdp1 好的
dzdh
130 天前
重启发送 term 信号。结束进程就行了。至于你说的产生僵尸进程是因为没有监听端口吗?如果有的话不应该新进程起不来么。stop 超过等待时间会强制 kill 进程,你开子进程了?
zhuoyue100
130 天前
@dzdh 没有监听端口,就是执行一个业务脚本 比如:统计日志信息 当然有一些复杂的业务执行需要很久。但是重启的话我需要将这个进程强杀掉,重新执行
june4
130 天前
换 systemd
dzdh
130 天前
@zhuoyue100 #4

killasgroup=true

stopasgroup=true

stopwaitsecs=600 600 秒没停止强制 kill

非常驻进程不适合用 supervisor 跑
zhuoyue100
130 天前
@dzdh 好的
zhuoyue100
130 天前
@june4 这个还没用过,目前都是用的 supervisor 来管理项目
julyclyde
130 天前
systemd 可以解决这个问题( KillMode=cgroup )
这也是我一直提倡不要用 supervisorD 的原因之一
zhuoyue100
130 天前
已经解决了,在 go 项目开启一个协程监听 term 信号,主动释放资源
dorothyREN
130 天前
systemd 不香吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX