- 一、问题现象
nohup java -jar xxx.jar >xxx.txt &
- 二、解决方案
将命令改成:
nohup java -jar xxx.jar >xxx.txt 2>&1 &
说明:
一个命令的执行伴随着三种输入输出
标准输入(stdin):默认指向键盘的输入,可以通过标准输入重定向<,让标准输入指向文件输入
标准输出(stdout) :指命令产生的正常的输出,如echo aaa,标准输出默认指向终端显示器,可以通过输出重定向>,让标准输出重定向到文件
标准错误输出(stderr):指命令产生的错误信息的输出,如执行了不存在的命令,标准错误输出也默认指向终端显示器,同样可以通过输出重定向>,让标准错误输出重定向到文件
所谓的输出重定向到文件,是指把默认输出到终端显示器的信息写入到指定文件
标准输入,标准输出,标准错误输出的文件描述符分别时0,1,2。
“>” 表示输出重定向
“2>&1”是指把标准错误输出重定向到标准输出的引用,即也重定向到file
例子:
#标准错误输出重定向到log
sh xxx.sh 2> log
#标准输出重定向到log1,标准错误输出重定向到log2
sh xxx.sh >log1 2>log2
#标准输出重定向到文件log,标准错误输出重定向到标准输出的引用
sh xxx.sh >log 2>&1
#标准错误输出重定向到文件testlog,标准输出和重定向到标准错误输出的引用
sh xxx.sh 2>log 1>&2
#标准输出重定向到log文件,标准错误输出也重定向到log文件
sh xxx.sh 1>log 2>log
补充说明:
command>a 2>a 与 command>a 2>&1的区别:
command 1>a 2>&1与command 1>a 2>a还是有区别的,区别就在于前者只打开一次文件a,后者会打开文件两次,并导致stdout被stderr覆盖,可能导致某些输出错误。
&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。