如何重写nohup.out?

如何重写nohup.out?

我用于nohup在后台运行远程服务器上的命令,并使用nohup.out文件来检查进度。我可以将其设置nohup为重写,nohup.out因为它只包含一行(最后一个标准输出)吗?

答案1

来自评论,似乎用户希望能够检查输出文件,然后在再次检查之前清空它。

为此,启动程序并重定向>>到输出文件:

$ somecommand >>logfile &

logfile然后以任何你想要的方式阅读。当你想清空文件时,只需执行

$ >logfile

这会截断文件但将其保留在原处。当程序下次写入输出文件时,它将写入文件的开头。

我们用来>>以“追加模式”打开文件。这意味着对文件的任何新写入都将始终发生在文件的(当前)末尾。

如果我们使用>并截断该文件,则文件中的新写入将发生在文件中最初放置的位置。这意味着文件开头和新内容之间的区域将被空字节填充。

答案2

只是使用nohup而不进行任何重定向,文件nohup.outappend mode.

这就是为什么命令检查后文件被截断的原因

> nohup.out

将文件长度设置为零,并将程序的后续输出写入nohup.out文件的开头。

这正是上述问题的答案所告诉的——而且它有效。这对于冗长的输出可能很有用,在检查运行的当前状态后,文件的内容不再有意义。

正如问题所示,程序的输出只有一行,因此rm nohup.out下一次调用之前的 a 给出的结果与> nohup.out唯一的区别是文件在删除后不存在,否则仍保留零长度文件。

答案3

nohup在外部和/或 shell 特定的实现中,没有任何选项可以满足您的要求。几个替代想法:

  • 通过重定向截断文件。就像是:nohup firefox 2>&1 > nohup.out &。通常都是同样的事情,但只是手动完成。

  • rm在开始新命令之前保存文件。就像是:rm nohup.out; nohup firefox 2>&1 &

相关内容