我经常使用该程序,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
。