我有一个Java程序,该程序执行以下Shell脚本以自行重新启动。
sleep 5
nohup java -jar /home/my-dir/MyJar.jar &
如果我从终端运行脚本,它将按预期运行。但是,如果Java程序执行脚本,则程序将正常启动,但不会将任何内容写入输出文件。
我通过以下代码启动脚本
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("/bin/sh", "/home/my-dir/start.sh");
try {
processBuilder.start();
logger.info("Successfully started");
} catch (IOException e) {
e.printStackTrace();
}
除非您将nohup的值导出到脚本的环境中(例如,导出nohup = / usr / bin / nohup),否则$ nohup将评估为空字符串-因此您的命令
nohup根本没有被调用。您可能想要
nohup java -jar MyJar.jar & tail -f nohup.out
最好使输出文件明确:
$ nohup java -jar MyJar.jar > nohup.out & tail -f nohup.out