有没有办法将 nohup 输出重定向到 nohup.out 以外的日志文件?

And*_*rew 162 io-redirection nohup

我经常使用该程序,nohup以便我的进程不受挂断的影响。所以如果我想让程序program免于挂断,我使用命令

nohup program &
Run Code Online (Sandbox Code Playgroud)

其中,&并将其进程在后台运行。

启动时,nohup给我信息:

nohup:将输出附加到 `nohup.out'

有没有办法将输出发送到文件以外的文件nohup.out?我经常想使用 运行同一目录中的多个进程nohup,但如果我这样做,所有输出都会集中在一个nohup.out文件中。

手册页(例如,here)似乎没有指定日志文件的选项。你能确认一下吗?另外,您对我如何解决这个问题有什么想法吗?

lk-*_*lk- 176

GNU coreutilsnohup手册页表明您可以使用普通重定向:

如果标准输入是终端,则从 /dev/null 重定向它。如果标准输出是终端,则尽可能将输出附加到“nohup.out”,否则附加“$HOME/nohup.out”。如果标准错误是终端,则将其重定向到标准输出。要将输出保存到 FILE,请使用“nohup COMMAND > FILE”。

编辑:我一开始没有阅读你的链接;您可能有不同版本的nohup,尽管本节建议您仍然可以使用普通重定向:

 nohup.out          The output file of the nohup execution if
                    standard  output is a terminal and if the
                    current directory is writable.
Run Code Online (Sandbox Code Playgroud)

您可以将标准输出和标准错误重定向到不同的文件:

nohup myprogram > myprogram.out 2> myprogram.err
Run Code Online (Sandbox Code Playgroud)

或到同一个文件:

nohup myprogram > myprogram.out 2>&1
Run Code Online (Sandbox Code Playgroud)

  • 它似乎不起作用。它重定向 nohup 命令的输出而不是 myprogram 的输出。 (5认同)
  • @Kris 重定向应该在尾随的 `&` 字符之前发生 (5认同)
  • 这不是特定于 GNU 实用程序的,其行为由 POSIX 指定。 (4认同)

小智 25

在此处添加Jim评论作为答案以获得更多可见性。

用于nohup program > program.out &将输出写入program.out而不是nohup.out

  • 正如接受的答案中所述,它需要是 `nohup program > program.out 2>&1 &` 才能重定向 stderr。 (2认同)

joa*_*aes 14

好吧,如果你正在使用 python 并且已经搜索了很长时间,但无法使其工作。干得好:

nohup python -u my_script.py > program.out 2>&1 &

原因:Python 在写入输出之前缓冲,-u禁用该行为。

更新:您还可以设置环境。变种 PYTHONUNBUFFERED=1 对于同样的行为。