Java执行运行守护进程脚本的Bash脚本【JAVA教程】

!
也想出现在这里? 联系我们
信息

Java执行运行守护进程脚本的Bash脚本,第1张

概述Java执行运行守护进程脚本的Bash脚本

我正在处理当我的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();

该脚本执行以下 *** 作来处理另一个处理所有重新启动逻辑的脚本。 它看起来像下面这样:

#!/bin/bash (bash /some/directory/shutdownHandler.sh \”true\” &) exit 0

在Java应用程序中,当我调用包含ProcessBuilder逻辑的函数时,在shutdownHandler.sh脚本中看不到逻辑的效果。 即使是简单的文字回声文件也不会发生。 我已经检查过我有正确的权限。

我将如何获得在bash当前的鼠标坐标?

将由PHP Cli输出的值分配给shellvariables

Unix脚本在每行末尾添加^ M

不能在while循环之外读取存储在while循环中的variables

如何将文件夹中的文件列表发送到linux中的txt文件

当我直接从命令行执行restart.sh时,它按预期工作。

请咨询我为什么看到这种行为差异。 有什么方法Java是杀死守护程序的脚本?

如何用filter链过滤行

合并文件反向

使用BASH显示进度(工作)指标

bash是否有一个caching来记住它上次find的二进制文件的位置?

如何删除名称以“ – ”开头的文件

我建议你尝试下面的简化:

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的中断shutdownHandler.sh )。

我找到了一种方法让脚本shutdownHandler.sh在我描述的使用场景中正确触发。 问题在于我如何守护程序shutdownHandler.sh 。 我已经将restart.sh更改为:

#!/bin/bash LOGfile=\”/some/log/directory/scriptLog.log\” (setsID /some/directory/shutdownHandler.sh \”true\” >$LOGfile 2>&1 < /dev/null &) exit 0

以上做了一些关键的事情:

处理脚本的stdout , stderr和stdin 。 stdout和stderr被引导到LOGfile并将dev/null附加到stdin

断开控制tty

将脚本修改为init。 shutdownHandler.sh将不会与JVM在同一个进程树中

总结

以上是内存溢出为你收集整理的Java执行运行守护进程脚本的Bash脚本全部内容,希望文章能够帮你解决Java执行运行守护进程脚本的Bash脚本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞175 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容