如何在不终止我的应用程序的情况下旋转 nohup.out 文件

如何在不终止我的应用程序的情况下旋转 nohup.out 文件

我的nohup.out文件增长得很快。

我在后台运行一个应用程序,它正在写入nohup.out文件,

现在我需要旋转nohup.out文件而不终止我的应用程序。可以这样做吗?

答案1

不确定我是否太晚了。但对于现在偶然发现这个论坛的其他人来说,我不需要尝试任何带有 flog 的东西。

我的工作开始得很简单:

nohup <my process> &

这将启动我的工作并开始附加到该目录中的 nohup.out。

我所要做的就是设置一个通常随发行版提供的 logrotate,并在/etc/logrotate.conf

~/my abosolute path/nohup.out {
    size 1024k
    copytruncate
    rotate 100
    maxage 100
}

成功了!!在获取同一文件上的新附加内容时,nohup.out 被截断。进程也没有死掉。并且nohup.out-20190528创建了一个新的 nohup.out,如下所示。

希望这可以帮助。

答案2

您无法旋转它。您可以使用命令截断它>nohup.out,这将删除文件中的所有内容。

如果需要保存输出,您可以先复制文件,然后截断它。但是,在复制文件之后但截断文件之前,存在一个小的竞争窗口,可以在其中写入输出。在该窗口期间写入的任何输出都将永远丢失。

答案3

你应该看看鞭打结合logrotate。如果你通过它来管道传输你的应用程序输出,那么你就可以SIGHUP终止正在运行的应用程序,而无需终止正在运行的应用程序。

flog(文件记录器)是一个从 STDIN 读取输入并写入文件的程序。

如果收到 SIGHUP,文件将重新打开,以允许日志轮换[参见 RH 上的 logrotate(8)]。

仅当 flog 检测到发生轮换(即旧文件消失或 inode 更改)时,才会重新打开日志文件。flog 非常小(内存占用不到 500 字节)。

答案4

你不能。

您可以取消链接文件(rm),但数据仍然在磁盘上占用空间,只要有打开的文件句柄,就会继续写入。

您可以重命名该文件 - 但这并不能阻止它被写入(但如果您定期启动后台作业,则较新的作业将写入同一个文件)。

实际上你应该明确地将作业的输出重定向到专门处理这个问题的东西上(例如发表于 2018-07-23)。

相关内容