换句话说,我可以这样做吗?
nohup java -jar myProgram.jar 2>&1 > output.log &
或者,这不是合法命令吗?或者,我是否需要将其手动移至背景,就像这样:
java -jar myProgram.jar 2> > output.log
jobs
[CTRL-Z]
bg 1
#1 楼
第一个命令的一个问题是您将stderr重定向到stdout所在的位置(如果按照注释中的建议将$更改为&),然后,您将stdout重定向到某个日志文件,但是不会随重定向的stderr 。您必须以另一种顺序进行操作,首先将stdout发送到想要的位置,然后将stderr发送到stdout的地址为some_cmd > some_file 2>&1 &
,然后可以将&放在背景上。可以使用
jobs
命令访问作业。 jobs
将显示正在运行的作业并编号。然后,您可以使用%以及类似kill %1
的数字来谈论作业。 另外,如果没有&,则可以使用Ctrlz挂起命令,使用
bg
命令将其置于后台,并使用fg
将其带回到前台。结合jobs
命令,此功能非常强大。可以在上面的部分中阐明有关编写命令的顺序。假设stderr是地址1002,stdout是地址1001,文件是1008。该命令从左到右读取,因此在您的命令中首先看到的是
2>&1
,它将stderr移至地址1001,然后看到> file
,该命令将stdout移至1008,但将stderr保持在1001。它不会拉动指向1001的所有内容并将其移至1008,而只是引用stdout并将其移至文件。反之,它将stdout移至1008,然后将stderr也移动到stdout指向的点,也就是1008。这样,两者都可以指向单个文件。
评论
$之后,似乎无法捕获pid!
–碎肉
2015年12月2日,上午8:21
同样值得注意的是:您可以使用&> file.out将stdin和stdout都重定向到输出文件,这可以减少将2>&1放在命令行中错误位置的可能性。
–丹
17年1月4日在21:33
#2 楼
java -jar myProgram.jar &> output.log &
请注意,
&>
将stdout和stderr都定向到output.log 评论
单行解释将使答案完整。
–anaik
17年7月7日在6:12
@ abhisheknaik96它运行jar文件,并将stdin和stderr都重定向到output.log并使其成为后台进程。
– P Pang
17-10-26在6:48
#3 楼
以<Ctrl+Z>
停止并以bg
在后台继续等效于在命令末尾以&
执行。因此,要在后台运行并重定向输出:
java -jar myProgram.jar 2> errorOutput.log > output.log &
如果您还需要在离开终端时不死此命令,则应使用
nohup
评论
哦,我懂了。您是说附加的“&”字符多余吗?
– djangofan
13年5月7日在20:32
我只引用手册页。由于nohup无论如何都会在后台执行命令,因此在后台执行nohup本身似乎是多余的
– RSFalcon7
13年5月8日,0:31
nohup不在后台执行命令,您必须显式附加&
– jlliagre
13年6月3日在22:34
使用bg将进程移至后台后,可以通过运行disown将其从会话中分离出来,这使该进程在关闭终端时不会消失。
–科恩。
16 Dec 30在15:09
#4 楼
tee
命令也很普遍。 nohup java -jar myProgram.jar | tee output.log &
评论
你试过了吗?你得到什么错误?另外,我不确定您是否有错字或代码中的错误。 2> $ 1应该是2>&1。