作者 by 小楼 / 2022-03-24 / 暂无评论 / 63 个足迹
昨天上班一到现场发现一个系统服务挂了,检查发现是根目录被日志写满导致的,清理完日志后,就顺手写了个监测存储占用自动删除日志的脚本 加到定时任务里面去了,脚本如下:
#!/bin/bash
#监控根目录空间占用超过90%后,自动删除data-log目录下前天到10天前的日志
#获取当前根目录存储占用
df=`df -h|grep 'centos-root'|awk '{print $5}'|grep -Eo [0-9]+`
#获取当前时间戳
d=`date '+%s'`
if [ $df -gt 90 ]
then
for i in {2..10}
do
find /data-logs/archive -name *`date -d @$(($d-86400*$i)) '+%Y-%m-%d'`*.log.gz|xargs rm -f
done
echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> jilu.txt
else
echo "`date '+%Y-%m-%d %H:%M:%S'` 根目录占用$df%" >> jilu.txt
fi
今天过去发现定时任务没生效,把脚本和定时任务的命令来回检查了好多遍,测试了好久才发现是因为输出记录到jilu.txt
echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> jilu.txt
这里用的是相对路径,这样是不对的 必须用绝对路径,改为绝对路径后就正常了。
#!/bin/bash
#监控根目录空间占用超过90%后,自动删除data-log目录下前天到10天前的日志
#获取当前根目录存储占用
df=`df -h|grep 'centos-root'|awk '{print $5}'|grep -Eo [0-9]+`
#获取当前时间戳
d=`date '+%s'`
if [ $df -gt 90 ]
then
for i in {2..10}
do
find /data-logs/archive -name *`date -d @$(($d-86400*$i)) '+%Y-%m-%d'`*.log.gz|xargs rm -f
done
echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> /data-logs/jilu.txt
else
echo "`date '+%Y-%m-%d %H:%M:%S'` 根目录占用$df%" >> /data-logs/jilu.txt
fi
独特见解