linux定时删除2周前的日志文件
前言
有好几次,部署的docker容器差不多每个月都会因为日志越攒越多,导致可用空间不足,服务就宕机了,所以就需要写一个定时删除日志的脚本,但这个shell脚本和crontab的写法有5年多没接触了,所以很不熟悉,还是花了点时间来处理,这里记录下~
delScript.sh的编写
#!/bin/bash
# 定义日志目录
LOG_DIR="/home/project/prod/logs"
# 获取当前日期
CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S")
echo "-------------------$CURRENT_DATE--------------------"
echo "删除的日志文件所在的目录为: $LOG_DIR"
# 计算2周前的日期
ONE_WEEK_AGO=$(date --date='14 days ago' +"%Y-%m-%d")
# 删除2周前的日志文件
echo "开始删除 $ONE_WEEK_AGO 前的日志文件"
find ${LOG_DIR} -type f -name "all.log.*" -o -name "error.log.*" | while read -r file;
do
file_date=$(echo "$file" | grep -oP '\d{4}-\d{2}-\d{2}')
if [[ "$file_date" < "$ONE_WEEK_AGO" ]]; then
rm -f "$file"
echo "已删除文件: $file"
fi
done
echo "完成今日:$CURRENT_DATE 的日志文件删除任务!"
crontab的编写
sudo crontab -e
进入后在英文键盘模式下,点击键盘 i 键,粘贴下面的命令:
0 1 * * * sh /home/shell/delScript.sh >> /home/shell/delLog_prod.log 2>&1
0 1 * * *
表示每天的凌晨1点执行这个删除日志的脚本,我在/home/project/prod/logs目录下touch了all.log.2024-11-03和error.log.2024-11-03文件后,把定时任务时间调整为12点07分执行,到了这个时间点之后,执行cat /home/shell/delLog_prod.log
日志,看到了想要的日志,文件也删除了的,接着又touch了all.log.2024-11-02和error.log.2024-11-02,修改定时任务时间为12点11分,到了这个点之后再看日志是追加了的,如下:
-------------------2024-11-21 12:07:02--------------------
删除的日志文件所在的目录为: /home/project/prod/logs
开始删除 2024-11-07 前的日志文件
已删除文件: /home/project/prod/logs/all.log.2024-11-03
已删除文件: /home/project/prod/logs/error.log.2024-11-03
完成今日:2024-11-21 的日志文件删除任务!
-------------------2024-11-21 12:11:01--------------------
删除的日志文件所在的目录为: /home/project/prod/logs
开始删除 2024-11-07 前的日志文件
已删除文件: /home/project/prod/logs/all.log.2024-11-02
已删除文件:/home/project/prod/logs/error.log.2024-11-02
完成今日:2024-11-21 的日志文件删除任务!
分析了下每天两个日志文件要占用450兆的内存,存14天,大概就是占6个g,通过
df -Th
查看磁盘情况,还是很充足的。
----------------知道的越多,不知道的越多------------