使用cron作业删除日志文件



嗨。我想从文件夹中删除过去7天的所有日志文件,但保留所有其他文件。我可以使用以下命令吗?如何指定它只删除扩展名为.log的文件?

 find  /path/to/file -mtime +7 -exec rm -f {} ; 

我需要把这个命令写进某个文件吗?或者我可以在命令提示符下写它,让它每天自动运行吗?

我不知道如何在linux中运行cron作业。

使用通配符。只需将其放在crontab中,即可使用crontab -e选项编辑crontab作业
参见示例:

* * * * *  find  /path/to/*.log -mtime +7 -exec rm -f {} ; 

为了增加答案,请查看这篇关于如何使用crontab的好文章!在Linux中。

通过运行crontab -e编辑个人crontab。这将保存到/var/spool/cron/<username>。该文件将是所有者的用户名,因此root将是/var/spool/cron/root。文件中的所有内容都以文件所有者的身份运行。

crontab的语法如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

当您通过crontab -e编辑自己的个人crontab时,您可以省略用户名字段,因为用户是由文件名推断的(请参阅第一段(。

话虽如此,你的条目应该是这样的:

0 5 * * *  find  /path/to/*.log -mtime +7 -delete

这将在系统时间每天早上5:00运行。我认为你不需要它比每天更频繁地运行,因为你正在删除7天的文件。

请不要过度使用-exec选项,因为-delete选项正是你想要做的。exec为每个文件分叉一个shell,这会过度浪费系统资源。

完成后,您可以使用crontab -l列出您的个人crontab。

ps。大多数Linux系统上的默认编辑器是vi,如果您不了解vi,请通过设置环境变量export EDITOR=nano 来使用类似nano的简单编辑器

find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} ;

要创建cron作业,请在/etc/cron.daily目录中放入一个包含以下内容的文件:

#!/bin/sh
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} ;

您应该使用crontab -e来编辑crontab并安排作业。它可能看起来像这样:

* 1 * * * /usr/bin/find /path/to/file -name '*.log' -mtime +7 -exec rm -f {} ; 

这将在每天凌晨1点递归地删除目录/path/to/file中的所有.log文件。

由于这是关于日志文件的,您应该查看logrotate。它每天从系统cron作业运行,并将根据/etc/logrotate.conf文件中的规则为您旋转日志,该文件通常包括/etc/logrotate.d目录。所以不需要crontab也不需要find。

如果您没有权限为自己的配置向/etc/logrotate.d添加文件,那么您也可以拥有自己的cron作业。

/etc/logrotate.d.中有很多例子

它希望您的应用程序写入单个文件。它不适用于每天登录到不同日志文件的应用程序。应用程序通常不需要这样做。如果应用程序保持日志文件打开,logrotate可以运行postrotate脚本来告诉应用程序重新打开日志文件。

你们做得很艰难。尝试使用清除命令

* * * * 0 clear > /home/user/CronLog.txt:

其中0为周日,7为周六。">"将清除日志,与添加到日志中的">>"类似。如果你的日志文件是root,那么在"清除"之前键入"root",就像这个

* * * * 0 root clear > /home/user/CronLog.txt

在谷歌上搜索了这个特定的主题后,我发现许多人建议使用-delete选项,如下所示:

* * * * *  find  /path/to/*.log -mtime +7 -delete;  

此版本的好处是易于记忆,并且性能更好,因为-exec将为要删除的每个文件生成一个新进程。

以下是一些参考资料:https://linuxaria.com/howto/linux-shell-how-to-use-the-exec-option-in-find-with-examples
https://unix.stackexchange.com/questions/167823/find-exec-rm-vs-delete

这将删除早于7天的日志文件

* * * * *  find  /path/to -name '*.log' -mtime +7 -exec rm -f {} ;

这将删除超过30分钟的日志文件

* * * * *  find  /path/to -name '*.log' -mmin +30 -exec rm -f {} ;

最新更新