![]() | 1 susecjh 2020-10-29 15:32:13 +08:00 docker |
![]() | 2 DoctorCat 2020-10-29 15:40:13 +08:00 写个看门狗脚本,例如 kill YourGoService && ./YourGoService 然后 cronjob 定期运行一次 |
![]() | 3 Maboroshii 2020-10-29 15:40:57 +08:00 ![]() systemd |
![]() | 4 meshell 2020-10-29 15:43:41 +08:00 不可能用 supervisor 吗 |
![]() | 5 676529483 2020-10-29 16:50:36 +08:00 虚机起就 systemd,容器就 docker --restart=always |
6 coderxy 2020-10-29 16:52:01 +08:00 docker 吧 |
![]() | 7 wellsc 2020-10-29 16:54:18 +08:00 systemd |
![]() | 8 zunceng 2020-10-29 17:32:52 +08:00 你的 http 框架最好可以支持 HandleChain 这样可以实现一个 recover 的中间件 func HandleRecover(ctx webFrame.Context) { ctx.Next() if err := recover();err != nil { // print err } } 然后把这个中间件加在 HandleChain 的第一个 就可以了 router.use(HandleRecover) 最简单的 直接用成熟的 http 框架 比如说 gin 自带 recover |
9 dongisking 2020-10-29 17:36:35 +08:00 最好的还是 systemd 和 docker |
10 coderxy 2020-10-29 17:40:16 +08:00 @zunceng 没用的,go 里面开启一个新的协程就得重新捕获,不然整个程序就会 crash 。而且你这个写的也不对,ctx.next()应该放在 recover 后面,而且还有放到 defer 里。不然 ctx.next()先执行,里面有 panic 你的程序就 crash 了 |
![]() | 11 index90 2020-10-29 17:45:33 +08:00 用进程守护就不怕中断服务中断吗? |
![]() | 13 cheng6563 2020-10-29 19:10:59 +08:00 via Android 写一个健康检查的接口。 外部用 systemd 或者 docker 之类的进行健康检查。 |
![]() | 14 SingeeKing PRO service 外面包裹一层自动重启的软件,例如利用 supervisor / pm2 做管理 |
![]() | 15 SingeeKing PRO 没细看,lz 是不是对 supervisor 有误解,supervisor 只是用 Python 写的,可以管理任何进程而不是只能管理 python 程序 |
![]() | 16 janxin 2020-10-29 21:12:46 +08:00 你进程都崩了,很多信息会丢的,你确定这样没问题吗? |
17 outoftimeerror 2020-10-29 21:15:08 +08:00 docker+k8s |
![]() | 18 freestyle 2020-10-29 21:18:13 +08:00 via iPhone golang 版 supervisord,不需要 Python 环境,一个二进制文件加配置文件 https://github.com/ochinchina/supervisord |
![]() | 19 ArJun 2020-10-29 21:51:33 +08:00 docker 最好用 |
![]() | 20 ericgui 2020-10-30 09:58:29 +08:00 @zunceng 重启还是要靠系统层面解决,比如内存泄露咋办,这 recover 就没用了,平时每次执行都 if else 一下,其实浪费性能 |
![]() | 21 sunshinev 2020-11-27 18:04:26 +08:00 supervisored 啊,好使~ |