我正在运行一个使用 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。如果它收到错误指示该进程不再存在,则会启动清理操作。