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

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

我经常使用该程序,nohup这样我的进程就不会出现挂起的情况。因此,如果我想让程序program免受挂起的影响,我使用命令

nohup program &

where&将进程置于后台。

开始时,nohup给我消息:

nohup:将输出附加到“nohup.out”

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

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

答案1

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.

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

nohup myprogram > myprogram.out 2> myprogram.err &

或同一文件:

nohup myprogram > myprogram.out 2>&1 &

(不要忘记最后的 & 放入后台)

答案2

添加吉姆在这里评论作为答案以获得更多可见性。

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

答案3

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

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

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

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

答案4

有人可以解释一下该命令吗?你能解释一下象形文字 2>&1 的含义以及它的作用吗?

  • nohup命令执行给出的命令,同时忽略 SIGHUP。
  • SIGHUP 代表“挂断”,通常在您失去与系统的连接(网络中断)时发送到程序。
  • 如果标准输出是终端,则默认写入nohup.out当前目录。
  • 2>&1会使“连接到终端”部分无效。
  • 表示2>标准错误写入&1,与标准输出含义相同。
  • 然后> program.out告诉 shell 将标准输出写入文件program.out

相关内容