dja*_*fan 176 shell bash shell-script
我可以同时将输出重定向到日志文件和后台进程吗?
换句话说,我可以做这样的事情吗?
nohup java -jar myProgram.jar 2>&1 > output.log &
Run Code Online (Sandbox Code Playgroud)
或者,这不是合法的命令吗?或者,我是否需要手动将其移动到后台,如下所示:
java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1
Run Code Online (Sandbox Code Playgroud)
Jac*_*all 246
您的第一个命令的一个问题是您将 stderr 重定向到 stdout 所在的位置(如果您按照评论中的建议将 $ 更改为 & ),然后将 stdout 重定向到某个日志文件,但这并没有拉动重定向的 stderr . 您必须按其他顺序执行,首先将 stdout 发送到您希望它去的地方,然后将 stderr 发送到 stdout 所在的地址
some_cmd > some_file 2>&1 &
Run Code Online (Sandbox Code Playgroud)
然后你可以抛出 & 将其发送到后台。可以使用该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。这样两者都可以指向单个文件。
小智 32
java -jar myProgram.jar &> output.log &
Run Code Online (Sandbox Code Playgroud)
请注意,&>将 stdout 和 stderr 都指向 output.log
RSF*_*on7 17
<Ctrl+Z>在后台停止和继续bg执行相当于&在命令的末尾执行。
因此,对于在后台运行并重定向输出:
java -jar myProgram.jar 2> errorOutput.log > output.log &
Run Code Online (Sandbox Code Playgroud)
如果你还需要这个命令在你离开终端时不会死掉,那么你应该使用 nohup
| 归档时间: |
|
| 查看次数: |
361425 次 |
| 最近记录: |