使用cron作业删除日志文件

use*_*884 12 linux cron ubuntu-12.04

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

 find  /path/to/file -mtime +7 -exec rm -f {} \; 
Run Code Online (Sandbox Code Playgroud)

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

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

Up_*_*One 19

使用通配符.而只是把它放在你的crontab 使用crontab -e命令选项,编辑您的crontab作业.
见例子:

  * * * * *  find  /path/to/*.log -mtime +7 -exec rm -f {} \; 
Run Code Online (Sandbox Code Playgroud)

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

编辑:将corntab更新到crontab

  • 您也可以使用-delete而不是"-exec rm -f {} \;" 更容易记住! (4认同)

typ*_*eaf 9

您可以通过运行来编辑您的个人 crontab crontab -e.这将保存到/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
Run Code Online (Sandbox Code Playgroud)

当您编辑自己的个人 crontab时crontab -e,您将省略用户名字段,因为用户是通过文件名推断的(参见第一段).

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

* * * * *  find  /path/to/*.log -mtime +7 -delete
Run Code Online (Sandbox Code Playgroud)

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

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

PS.大多数Linux系统上的默认编辑器是vi,如果你不了解vi,可以通过设置environ变量来使用像nano这样简单的东西export EDITOR=nano


use*_*484 5

find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh
find /path/to/dir-containing-files -name '*.log' -mtime +7 -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)