请教Linux下脚本执行过程中,VPN断开或终端窗口关闭后的影响

发布于 2021-11-29 05:59:39 字数 405 浏览 847 评论 3

这个脚本大体的内容是这样的:

1. 调用JAVA程序1

2. 执行一系列rsync命令分发文件

3. 调用JAVA程序2

一次意外的执行过程是这样的(在SSH终端窗口上执行):

1. JAVA程序1执行到一半突然停止(没有任何报错,根据日志输出的情况,应该就是人工干预后的戛然而止)

2. rsync命令都正常执行,文件也都成功分发

3. JAVA程序2也正常执行完毕,但由于JAVA程序1的意外中断,导致最终结果有严重错误。

请问神马操作会导致这种情况,执行过程中窗口关闭,或者VPN断开,是否会导致这种情况发生?

在终端上执行脚本,关闭窗口之后,貌似脚本继续执行,但JAVA进程被杀掉了(只是怀疑),求科普。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌上芳菲 2021-11-29 21:00:55

是不是说,窗口关闭或者VPN断开,脚本应该也停止执行,而不会出现某个进程中断但脚本继续执行的情况?

终遇你 2021-11-29 20:59:01

回复
要搞清楚这些细节,就要研究bash是如何执行批处理中的各个命令的,有没有fork子进程,还有各个进程(java,rsync)如何处理HUP,TERM信号...... 除非你是linux下的C程序员,否则搞清楚这些其实没有任何特别的好处。 最佳实践和解决方案都有了,何不按照那些最佳方法做,以获得自己期望的执行结果呢?

月亮是我掰弯的 2021-11-29 10:00:13

窗口正常关闭的话,子进程都会收到Term信号,然后就退出了。

VPN断开后,使用这个虚拟终端的进程会收到HUP(挂机)信号,通常的处理也是退出。

你的情况很可能是在其它终端用kill -9 处理掉的,又或者是程序中没有中断挂钩,导致无法处理Ctrl-C的或Term信号的退出过程。

可能不同的glibc或环境变量会有不同影响,但正确的处理方法有两个:

1、用nohup运行

2、用Screen或其它终端复合器运行

--另外,对kill -9是没有办法的,只能增加脚本功能,判断java程序退出状态了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文