使用cron作业删除日志文件

时间:2014-03-17 18:43:23

标签: linux cron ubuntu-12.04

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

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

我是否需要将此命令写入某个文件,或者我可以在命令提示符下编写它并让它每天自动运行?

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

8 个答案:

答案 0 :(得分:19)

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

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

Just to increment the answer check this nice article on how to work with your crontab ! in Linux .

编辑:将corntab更新为crontab

答案 1 :(得分:9)

您可以通过运行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时,会省略用户名字段,因为用户是通过文件名推断出来的(请参阅第一段)。

话虽如此,您的参赛作品应如下所示:

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

-exec选项完全符合您的要求时,请不要使用-delete选项。 exec为每个文件分配一个shell,并且过度浪费系统资源。

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

PS。大多数Linux系统上的默认编辑器是vi,如果你不了解vi,可以通过设置environ变量export EDITOR=nano

来使用像nano这样简单的东西。

答案 2 :(得分:4)

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 {} \;

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

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

如果您无权将文件添加到/etc/logrotate.d以进行自己的配置,也可以拥有自己的cron作业。

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

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

答案 5 :(得分:0)

在搜索了这个特定主题之后,我发现很多人都建议使用 -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

答案 6 :(得分:0)

你们正在努力地做到这一点。尝试使用清除命令

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

其中0是星期日,7是星期六。 “>”将清除日志,并添加到“ >>”。如果您的日志文件是root用户,则在这样的“ clear”之前输入“ root”

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

答案 7 :(得分:0)

这将删除7天之前的日志文件

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

这将删除30分钟之前的日志文件

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