执行xx天自动删除日志需要两个东西,第一个是搜寻30天前写的日志的命令,第二个是自动周期执行脚本的命令,将二者结合就可以实现30天自动删除日志
搜寻30天前的日志
本文主要基于日志文件的最后修改日期做判断,而非判断日志的后缀名(有些日志可以命名为 日期.log,如 Zlog)
命令如下
find /var/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
解释
# /var/log/ 是日志的具体路径,可以改成别的
# -mtime 参数后面接的是查询多少天前的文件
# -name 参数后面接的是日志的名称,可以使用通配符
# -exec 参数后面接的是删除命令,当然也可以做的别的事情,应该不需要变化
自动周期执行脚本的命令
我们用到 crontab 命令,crontab 是从配置文件读取到日程计划 (比如说什么时间段,执行什么样的命令)
Linux crontab 命令 | 菜鸟教程
crontab [ -u user ] { -l | -r | -e }
# -u 指定用户
# -l 列出当前的日程计划
# -r 删除日程计划
# -e 在线编辑日程计划
# 日程计划定义:在什么时间段,执行什么样的指令
比如我们写一个日程计划 —— 每分钟将日期写入到 /home/123.txt
$ touch /home/123.txt
$ crontab -e
$ 写入如下信息
SHELL=/bin/bash
HOME=/
# 注释
* * * * * echo `date` >> /home/123.txt
我们 cat /home/123.txt 能看到每分钟都有写入
接下来讲下这个日程计划的语法,上文中 # 注释 以上的基本不会发生变化,所以不用管,主要是# 注释 下面的格式
f1 f2 f3 f4 f5 program
# 前面五个f都代表时间,意思不一样参考下面
# program代表具体执行的命令,应该不用讲解
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
一些解释
1、* 代表所有,在不同的位置意义不一样,比如说在 f1 的位置也就是第一个位置代表 0-59,也就是 0-59 与 * 在第一个位置等价,又比如第二个 * 代表 0-23 ,也就是 0-23 与 * 在第二个位置等价,以此类推
0-59 0-23 1-31 1-12 0-6 跟 * * * * * 等价
2、如果我们想每两分钟执行一次脚本,第一个位置应该写 */2 或者 0-59/2,斜杠代表每,在不同位置意思也不一样,在第二个位置就是每小时 如 0-23/2 ,代表每两小时执行一次
3、如果我们想每1 、3 、5分钟执行一次脚本,第一个位置可以填写 1,3,5
4、我不知道规则一和规则三能不能结合,比如 1-3,5-7
一些意外故障的排查,可以参考
crontab详解 - 小片清风 - 博客园
最后
我们将标题一和标题二结合就可以实现30天自动删除日志,其实这个操作应该不限于是删除日志,还可以做很多别的定时任务的事情
更多推荐
Linux 自动删除30天前日志
发布评论