Shell脚本删除日志
说明
我这里要清理的是/home/zyb/engines*/data内的日志文件
注:engines* (有多个这样的文件夹 大概是engines1到engines16)
也就是我要清理16个文件夹下data目录内的日志
log="./clear.log"
echo -e "执行 \e[1:32m [定时删除] \e[0m" [$(date '+%Y-%m-%d %H:%M:%S')] >> $log
printf "==============
清理engine1-16文件夹
==============\n"
# 清理几天前的日志
day=3
# 目录数 从1开始(我这里目录名称是engine1-engine16,我要清理每个engine*里的data目录内的日志文件)
file_num=16
echo "开始清理" [$(date '+%Y-%m-%d %H:%M:%S')] >> $log
for((i=1; i<=$file_num; i++));
do
find /home/zyb/engines$i/data -mtime +$day -type f -name '*-*-*-*:*:*:*:*' -exec rm -rf {} \;
done
echo "清理结束" [$(date '+%Y-%m-%d %H:%M:%S')] >> $log
这里进行解释
find /home/zyb/engines$i/data -mtime +$day -type f -name '*-*-*-*:*:*:*:*' -exec rm -rf {} \;
我使用find命令查询/home/zyb/engines\*/data
下的文件
-mtime +3
# 查找三天前的日志($day在上方被赋值了3)
-type f
# 类型 f 为普通文件
-name
# 我要清除的文件名称为 ****-****-****:****:****:****:**** 这种格式的随机英文数字组合,这里用正则匹配
-exec rm -rf {} \;
在find里使用可以执行命令,例如我们要做的删除 rm -rf
{}
花括号代表前面find查找出来的文件名。
\;
最后分号结尾 反斜杠只是充当 防转义的作用
配置定时任务
crontab -e
然后输入 30 5 * * * /home/zyb/clear.sh
每天的凌晨5点30会执行
crontab -l
查看定时任务
* * * * *
依次是 分钟 小时 日 月 星期
3 * * * * /home/zyb/clear.sh
每三分钟执行一次
3 5 * * * /home/zyb/clear.sh
每天凌晨5点3分执行
3 5 5 * * /home/zyb/clear.sh
每个月5号的凌晨5点3分执行
3 5 5 5 * /home/zyb/clear.sh
每年5月5号的凌晨5点3分执行
3 5 * * 1 /home/zyb/clear.sh
每周1的凌晨5点3分执行