Java执行运行守护程序脚本的Bash脚本
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java执行运行守护程序脚本的Bash脚本,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1316字,纯文字阅读大概需要2分钟。
内容图文
我正在处理一个在我的Java服务器应用程序请求重新启动服务器时运行的bash脚本.此脚本执行的操作需要位于Java应用程序的进程树之外.
我使用ProcessBuilder以下列方式调用Java中的重启脚本:
// Vars declared at the top of the file
private static final String LOC = "/some/directory/";
private static final String RESTART_SCRIPT = LOC + "restart.sh";
...
// In the function that is invoked to handle reboot behavior
final ProcessBuilder pb = new ProcessBuilder(RESTART_SCRIPT);
Process p = pb.start();
此脚本执行以下操作以对另一个处理所有重新启动逻辑的脚本进行deamonize.它看起来如下:
#!/bin/bash
(bash /some/directory/shutdownHandler.sh "true" &)
exit 0
当我在Java Application中调用包含ProcessBuilder逻辑的函数时,我没有在shutdownHandler.sh脚本中看到逻辑的影响.即使是简单的文本到文件的回声也不会发生.我已经检查过我有正确的权限.
当我直接从命令行执行restart.sh时,它按预期工作.
请告诉我为什么我看到这种行为上的差异. Java有没有杀死守护程序的脚本?
解决方法:
我建议你尝试以下简化:
final String[] RESTART_COMMAND = { "nohup", "/some/directory/shutdownHandler.sh", "true" };
final ProcessBuilder pb = new ProcessBuilder(RESTART_COMMAND);
Process p = pb.start();
//DON'T waitFor()
使用nohup和避免waitFor应该具有RESTART_SCRIPT实现的相同效果:两个进程的生命周期都是独立的(jvm不等待shutdownHandler.sh,Java进程的终止不会导致shutdownHandler的中断. SH).
内容总结
以上是互联网集市为您收集整理的Java执行运行守护程序脚本的Bash脚本全部内容,希望文章能够帮你解决Java执行运行守护程序脚本的Bash脚本所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。