如何在一定时间后自动删除日志并重新启动填满日志文件的进程?

DEV*_*CNN 7 process log kill nohup 16.04

服务器是 Ubuntu 16.04。我有一个正在运行的进程,nohup该进程将日志记录到本地文件中。此文件变得足够大以消耗 100% 的磁盘空间。为了解决这个问题,我必须先终止进程,然后删除日志文件。然后我重新开始这个过程。如何使用脚本或其他工具解决此问题?

muc*_*lux 14

随着logrotate您可以配置一个大的日志文件可能如何多少时间后得到或:

  • 日志文件被轮换(log.n 变成 log.n+1,最后一个日志文件被删除)

  • 在不干扰写入过程的情况下截断当前日志文件。

看看man 8 logrotate

  • @DEVCNN 您正在了解为什么使用标准输出并将其重定向到日志文件是 ** 最糟糕** 可能的日志记录方法。您的日志文件与日志记录过程相关联,**您对此无能为力**。实际的解决方案是使用适当的日志系统,该系统允许您将实际日志文件与进程分开,并允许您使用诸如“logrotate”之类的工具。有很多很好的理由,比如 `syslog` 和 `logrotate` 存在 - 你正在学习很多。 (3认同)

小智 4

我猜你是用 nohup 启动脚本/程序的

nohup scriptname 1>logfile.log 2>& &
Run Code Online (Sandbox Code Playgroud)

我建议不要删除日志文件只是为了清除它

echo -n >logfile.log
Run Code Online (Sandbox Code Playgroud)

如果删除/移动打开的文件,它将被写入,直到进程关闭文件或进程结束。

  • 这是从完整日志文件中释放磁盘空间的**极其**不可靠的方法。写入日志文件的进程具有当前偏移量,使用“>”截断文件不会更改该偏移量。下次写入文件时,如果底层文件系统支持稀疏文件,您可能会得到一个稀疏文件,或者您最终会得到一个相同大小的文件,几乎完全充满“\0”/NUL字符并占用相同的空间。 (2认同)