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

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

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

答案1

logrotate可以配置日志文件的大小或时间间隔:

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

  • 当前日志文件被截断但不干扰写入过程。

看一眼man 8 logrotate

答案2

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

nohup scriptname 1>logfile.log 2>& &

我建议不要删除日志文件,而是用以下方法清除它:

echo -n >logfile.log

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

答案3

要自动删除所有日志,.bashrc请使用您喜欢的文本编辑器编辑文件。这里我使用的是nano。在您的终端运行:

nano ~/.bashrc - 

将以下内容添加到文件底部:

rm -r /var/log   # Deletes logs directory
clear            # Clear the terminal

Ctrl+O节省Ctrl+X退出编辑模式

.bashrc每次您登录或启动终端实例时都会执行该文件,因此您的日志将始终被删除。

您还可以根据时间删除它们。例如,使用以下命令删除 3 天前创建的所有日志:

find /yourlog/path -mindepth 1 -mtime +3 -delete
  • -mindepth 1表示处理除命令行参数之外的所有文件。
  • -mtime +3将检查3天前修改的文件。
  • -delete将删除它们。

相关内容