nohup 命令无法将输出打印到 nohup.out

nohup 命令无法将输出打印到 nohup.out

我编写了一个 bash 脚本来在 ubuntu 或 Red Hat 环境中执行我的 jar 文件。这是我的 bash 脚本

#!/bin/bash
JAVA_HOME=/usr/lib/java/jdk1.8.0_131
$nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out


我的 bash 脚本将执行我开发的 jar,我希望将 jar 文件的输出打印到nohup.out任何 txt 文件中,这样我就可以轻松地找出任何问题,但当我执行脚本时似乎没有打印出任何内容,它会在终端中打印出所有输出。但当我 nohup java -jar /home/chikin/Downloads/hardcoded.jar &直接从终端执行时,它可以将所有 jar 输出打印到 nohup.out。我可以知道为什么我的脚本不起作用吗?每次我重新启动 ubuntu 机器时,我的脚本也无法触发,我测试了许多解决方案,但都没有奏效

答案1

除非您已将的值导出nohup到脚本的环境中(例如export nohup=/usr/bin/nohup),否则$nohup将计算为空字符串 - 因此您的命令

$nohup java -jar /home/chikin/Downloads/hardcoded.jar

变得简单

java -jar /home/chikin/Downloads/hardcoded.jar

sonohup根本没有被调用。你可能想要

nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out

(没有$)。


也许最好使输出文件明确:

nohup java -jar /home/chikin/Downloads/hardcoded.jar > nohup.out & tail -f nohup.out

因为如手册页中所述,输出文件的规则取决于标准输出是否是终端:

If standard output is a terminal, append output to 'nohup.out' if  pos‐
sible,  '$HOME/nohup.out'  otherwise.  If standard error is a terminal,
redirect it to standard output.  To save output  to  FILE,  use  'nohup
COMMAND > FILE'.

相关内容