当后台进程崩溃时运行脚本

当后台进程崩溃时运行脚本

我正在运行一个使用 Spring boot 创建的应用程序。但最后有时我看到它崩溃了。我正在使用 nohup 运行它。我想给它附加一个钩子,这样当这个进程停止时,就会运行一个脚本来备份 nohup.out 并发送一封邮件来通知服务器崩溃。有办法做吗?

注意:我想这不是必需的,只是为了提供信息。我正在使用ubuntu

答案1

提出了一个巧妙的方法卡米尔·马乔罗夫斯基这个答案 就是将后台应用程序链接到其清理过程,只需在一个 shell 上下文中使它们成为连续的命令即可。一个“简单”的方法是

nohup sh -c "<Main Process>; <reporting process>" &

其中,您异步运行一个nohup运行主进程的 'ed shell,然后在主进程终止(出于任何原因)后(无条件)运行报告/清理进程。更可靠的解决方案是编写一个简短的脚本:

#!/bin/sh
如果<主要流程>
然后
    <正常终止的处理>
别的
    <异常终止的处理>

或者

#!/bin/sh
<主要流程>
案例“$?”在
埃萨克

然后运行脚本nohup foo.sh &

如果您唯一担心的是应用程序因某些内部错误而死亡,这可能是最好的解决方案。如果存在某些风险其他进程变得疯狂并发送一堆致命信号,那么 shell(正在等待应用程序终止)也有可能被炸毁,因此无法启动清理进程。在这种情况下,您可能需要考虑G-曼回答,这表明有一个监控进程定期向应用程序发送信号 0。如果它收到错误指示该进程不再存在,则会启动清理操作。

相关内容