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

use*_*307 15 nohup

我的nohup.out文件正在快速增长。

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

现在我需要在nohup.out不杀死我的应用程序的情况下旋转文件。这能做到吗?

kas*_*erd 7

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

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

  • 我相信在文件句柄关闭之前截断不会释放磁盘上的任何空间。 (2认同)

小智 7

你应该看看floglogrotate. 如果你通过这个管道输出你的应用程序,那么你可以SIGHUP在不必终止正在运行的应用程序的情况下执行 flog 进程。

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

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

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


小智 7

不知道我是否为时已晚。但是对于现在偶然发现这个论坛的其他人来说,我不必尝试使用 flog 或任何东西。

我的工作就是这样开始的:

nohup <my process> &
Run Code Online (Sandbox Code Playgroud)

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

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

~/my abosolute path/nohup.out {
    size 1024k
    copytruncate
    rotate 100
    maxage 100
}
Run Code Online (Sandbox Code Playgroud)

它奏效了!!nohup.out 在同一文件上获取新的追加内容时被截断。这个过程也没有消亡。并nohup.out-20190528创建了一个新的 nohup.out 像这样。

希望这可以帮助。