我可以更改`nohup.out`的名称吗?

311
当我运行nohup some_command &时,输出会保存到nohup.out中;man nohup指令要求查看info nohup,后者解释如下:

如果标准输出是一个终端,那么命令的标准输出将被追加到文件“nohup.out”中;如果无法写入此文件,则将其追加到文件“$HOME/nohup.out”中;如果也无法写入该文件,则不运行该命令。

但是,如果我已经有一个使用nohup命令将输出保存到/nohup.out的命令,并且我想运行另一个nohup命令,我能否将输出重定向到nohup2.out

您知道建议的答案是否还将错误重定向到给定位置吗? - Charlie Parker
我个人发现使用nohup python script.py > my_output.out &更加有用。 - Charlie Parker
6个回答

521
nohup some_command &> nohup2.out &

完成。


Bash版本<4的旧语法:

nohup some_command > nohup2.out 2>&1 &

5
如果我理解正确,这将输出从stdout和nohup.out导向到nohup2.out。那么2>&1&是什么意思呢? - David LeBauer
13
2>&1会将标准错误输出重定向到与标准输出相同的输出文件中,而在这种情况下,输出文件是nohup2.out - ismail
20
在Bash 4中,两个重定向操作可以缩写为一个 &> nohup2.out - ephemient
1
我尝试了&> nohup2.out并且它有效,但是你如何确定你的bash版本? - monkut
1
@monkut 只需在bash中键入help就可以了。或者使用help | grep version。对我来说更容易记住。 - Godsmith
显示剩余11条评论

70

由于某些原因,上面的答案对我不起作用。在运行带有尾部& 的命令后,我没有像预期的那样返回到命令提示符。相反,我只是尝试了以下命令:

对我来说,上述答案出了问题;我在运行它时没有像预期的那样带有尾随的&返回到命令提示符。

nohup some_command > nohup2.out&

它按照我想要的方式运作。在这里保留,以防其他人遇到相似情况。参考Bash 4.3.8版本。


这是否也会重定向stderr?我想将所有内容,无论是错误还是输出,都重定向到一个单一的源。 - Charlie Parker

20

上述方法会在每次运行nohup命令时删除输出文件数据。

要在用户定义的文件中追加输出,可以在nohup命令中使用>>

nohup your_command >> filename.out &

这个命令将追加所有输出到你的文件中,而不会删除旧数据。


2
这是否也重定向了stderr?我想将所有内容,无论是错误还是输出,都重定向到一个单一的源。 - Charlie Parker

12

在Linux/Unix系统中,由于文件句柄指向独立于文件名存储的i节点,因此您可以在启动nohup something&后随时将默认的nohup.out重命名为任何其他文件名。因此,您也可以执行以下操作:

$ nohup something&
$ mv nohup.out nohup2.out
$ nohup something2&

现在something将行添加到nohup2.outsomething2将行添加到nohup.out


这是否也重定向了stderr?我想将所有内容,无论是错误还是输出,都重定向到一个单一的源。 - Charlie Parker
@CharlieParker 实际上你是可以的。请参见 https://dev59.com/b2cs5IYBdhLWcg3wfD5P - TrueY

1

我的 start.sh 文件:

#/bin/bash

nohup forever -c php artisan your:command >>storage/logs/yourcommand.log 2>&1 &

只有一件重要的事情。第一个命令必须是“nohup”,第二个命令必须是“forever”,“-c”参数是forever的参数,“2>&1&”区域是为“nohup”准备的。运行此命令后,您可以从终端注销,重新登录并运行“forever restartall”即可......您可以重新启动,并确保如果脚本停止,则forever将重新启动它。

我 <3 forever


这也会重定向标准错误吗?我想将所有内容,无论是错误还是输出,都重定向到单一来源。 - Charlie Parker

0
要将nohup命令的输出发送到自定义文件名,您可以使用重定向运算符>来指定文件名。以下是如何操作的步骤:
  1. 打开您的终端或命令提示符。

  2. 运行nohup命令,后跟您想要执行的命令,并使用>运算符将输出重定向到所需的文件名。例如:

   nohup your-command > custom-file-name.log &

your-command替换为您要在后台执行的实际命令,并将custom-file-name.log替换为所需的输出日志文件名。
3. 按Enter键执行命令。命令的输出将被重定向到指定的文件名。
4. 您现在可以关闭终端或命令提示符,而不会停止命令的执行。输出将继续写入指定的文件。
注意:如果您想将输出追加到现有文件而不是创建新文件,可以在重定向运算符中使用>>代替>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接