目前是写一个额外的脚本去监控这个进程,没了就重启,体验一般.
请问有没有系统级的方案,或者现成业界主流方案,请大大们赐教
1 Juicpt 2020-08-07 15:09:13 +08:00 linux 也有类似 windows 服务吧,可以直接拉起来自己 |
![]() | 2 wlsnx 2020-08-07 15:11:02 +08:00 systemd |
![]() | 3 luolw1998 2020-08-07 15:11:24 +08:00 |
4 Jirajine 2020-08-07 15:13:34 +08:00 via Android docker 自带的--restart 参数 |
![]() | 5 zliea 2020-08-07 15:14:06 +08:00 如果可以热备,像数据库主从切换,应该都是定时执行一个 sql(show status),然后进行切换的。 |
![]() | 6 zliea 2020-08-07 15:14:36 +08:00 关键词 keepalived |
![]() | 7 whenov 2020-08-07 15:14:50 +08:00 写个 systemd service,添加: Restart=on-failure |
![]() | 8 jasonyang9 2020-08-07 15:18:40 +08:00 via Android systemd 大法 |
![]() | 9 cgyimustc 2020-08-07 15:19:31 +08:00 如果是用定时探测的思路,方法很多,比如 crontab ; 如果是需要快速并且实时,需要使用父子进程通信的信号,如果子进程异常退出,会给父进程发 signal, 具体可以参考各种 daemon(supervisor/systemd), 或者使用.pid 文件,如 nginx |
![]() | 10 lusi1990 2020-08-07 15:53:18 +08:00 我都用过的: systemd ( Restart=on-failure ) supervisor () docker (--restart ) 推荐 systemd, 如果服务器重启,docker 或者 supervisor 不是开机启动,程序就不会启动。supervisor 我记得有 web 页面监控 |
11 saytesnake 2020-08-07 15:56:37 +08:00 systemd 最佳。 |
12 nightwitch 2020-08-07 15:59:10 +08:00 systemd,supervisor,pm2,docker...太多了 都是很成熟的方案了。 如果你不是远古时代的 Linux 那就用 systemd 吧,绝大多数发行版的基础设施,不用额外安装 |
![]() | 13 JJstyle 2020-08-07 16:03:42 +08:00 ,systemd vs *nix 哲学 ,systemd 赢了 |
![]() | 14 CEBBCAT 2020-08-07 16:03:57 +08:00 |
![]() | 15 Oceanhime 2020-08-07 16:15:06 +08:00 via iPad 系统级的用 systemd 写个 service 就行,方便好用。 现成的方案可以用 supervisor,有 python/go 两个版本,个人一直在用的方案,简单强大。 或者可以试试 docker restart,但是毕竟需要额外启动一个 daemon,可能需要占用一点额外资源。 如果是第三方,记得先设置自启动 |
16 Chenamy2017 2020-08-07 16:40:43 +08:00 自写一个服务,检测程序是不是存在,不存在就拉起来。 |
17 julyclyde 2020-08-07 17:54:12 +08:00 唯一可靠的就是 SIGCHLD 即 init respawn 或者 systemd service 方案 |
![]() | 18 pursuer 2020-08-07 19:16:29 +08:00 最正确的姿势当然是不要让程序挂掉 |
![]() | 19 misaka19000 2020-08-07 19:30:17 +08:00 不用那么麻烦,我告诉楼主一个关键词楼主去搜就行了 Supervisor |
20 CallMeReznov 2020-08-07 19:46:55 +08:00 这个不是 supervisor 干的吗? 或者 pm2? |
![]() | 21 autoxbc 2020-08-07 20:18:09 +08:00 ![]() 这是用 Deno 实现的保活,前端看着肯定亲切 (async function callee(){ await Deno.run( { cwd:'./', cmd:[ 'deno', 'run', '--allow-net', '--allow-read', 'file_server.ts', ], } ).status(); setTimeout( callee , 3000 ); } )(); 出错后隔 3 秒重启,防止一执行就出错的话,错误信息疯狂滚屏 |
![]() | 22 linvaux 2020-08-07 21:48:40 +08:00 supervisor |
![]() | 23 nuk 2020-08-07 22:00:50 +08:00 while true; do xxx; sleep 1; done |
24 hanguofu 2020-08-07 22:13:45 +08:00 systemd service 添加 Restart=on-failure 就一定可以了吗 ? 如果是的话,求个完整的 systemd service 范例 ,谢谢! |
25 EminemW 2020-08-07 22:36:39 +08:00 守护进程 |
27 Cbdy 2020-08-07 22:47:22 +08:00 via Android system docker pm2 还可以写个 crontab 自己监控一下 方法很多 |