我尝试在我的 shell 脚本中同时启动一个 java 程序和一个 echo 命令,首先我尝试了这个
java -jar server.jar & echo "$!" > $pidfile
但是当回显完成时,这会停止 server.jar
,我用
java -jar server.jar & echo "$!" > $pidfile && fg
它对我有用,但我认为这不是一个干净的解决方案。
现在我需要添加另一个 java 程序,两个程序应该同时运行,如果两个程序都完成/停止,脚本应该结束。
我在另一个 StackOverflow 问题中读到,我应该在该行的末尾添加一个 & wait
,但这会停止我的 server.jar
。
实际上它看起来像这样:
java -jar server.jar & echo "$!" > $pidfile && fg && java -jar heartbeat.jar
编辑:
整个脚本和服务器都在 tmux 中运行,所以没有必要保持存活。 server.jar
大约 24 小时运行,而 heartbeat.jar
检查服务器是否存在,两者都应该从一个脚本开始。
解决方案:
java -jar server.jar & echo "$!" > $pidfile ; java -jar heartbeat.jar & fg %1
我从 jars
收到两个输出,输入命令转到 server.jar
最佳答案
只是解释一下:Java 程序停止的原因是当执行脚本的 shell 终止时,所有后台进程都会收到 HUP
信号。为防止这种情况,您可以在 &
之后使用 disown
将其从 shell 的作业列表中删除。
对于这两个Java程序,我建议:
java -jar server.jar & # start java with server.jar as a background job
echo "$!" > "$pidfile" # echo the pid of the last background job into the pid file
java -jar heartbeat.jar & # start java with heartbeat.jar as a background job
fg %1 # set server.jar as foreground job for interactive use
编辑:wait
替换为 fg %1
,见评论。
关于linux - 同时启动多个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28761438/