java启动脚本报错:nohup: redirecting stderr to stdout

文章讲述了在启动Java项目时遇到的nohup命令报错问题,以及如何通过改变命令行参数解决这个问题。具体解决方案是将标准错误输出(stderr)重定向到标准输出(stdout)。文章还详细解释了标准输入、标准输出和标准错误输出的概念,以及输出重定向的不同方式和它们的IO效率影响。最后,对比了不同重定向语法的效果,强调了`2>&1`的使用能避免文件被覆盖并提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题现象

java项目启动脚本start.sh如下:

nohup java -jar xxx.jar >xxx.txt &

执行报错:

nohup: redirecting stderr to stdout

二、解决方案

将命令改成:

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 只打开一次文件a,IO效率更高。

command 1>a 2>a 打开文件两次,导致stdout被stderr覆盖,可能导致某些输出错误。IO效率较低。

&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值