机器学习平台运行了大量训练任务,这些任务会产生大量日志。之前对这些日志没有进行处理,经常受到磁盘报警及因磁盘爆满而导致训练失败甚至宕机等一系列问题的困扰。所以我就写了一个磁盘清理脚本,上线后这一系列的问题就得到了解决。
目标路径:/var/log
清理规则:
- 当磁盘使用率<70%时,清理超过3天的文件
- 当磁盘使用率>=70% && < 80%时,清理超过2天的文件
- 当磁盘使用率>=80% && < 90%时,清理超过1天的文件
- 当磁盘使用率>=90% && < 96%时,清理超过12小时的文件
- 当磁盘使用率>=96% 时,清理超过1天的文件
#!/usr/bin/env bash
echo "清理超过5天的文件"
find /var/log/ -type f -mtime +5|sudo xargs rm -f
echo "清理完毕"
p70=`df -h / | grep -c -E \(7[1-9]\%\)`
p80=`df -h / | grep -c -E \(8[1-9]\%\)`
p90=`df -h / | grep -c -E \(9[1-5]\%\)`
p95=`df -h / | grep -c -E \(9[6-9]\%\)\|\(100\%\)`
if [ $p70 -gt 0 ]
then
# 磁盘占用率>=70% && < 80%,清理2天以上的文件
expire_time="-mtime +2"
elif [ $p80 -gt 0 ]
then
# 磁盘占用率>=80% && < 90%,清理1天以上的文件
expire_time="-mtime +1"
elif [ $p90 -gt 0 ]
then
# 磁盘占用率>=90% && < 96%,清理12小时以上的文件
expire_time="-mmin +720"
elif [ $p95 -gt 0 ]
then
# 磁盘占用率>=95%,清理1小时以上的文件
expire_time="-mmin +60"
else
# 清理3天以上的文件
expire_time="-mtime +3"
fi
echo "expire_time=$expire_time"
for i in `find /var/log/ -name "*.log" -o -name "*.log.*" -o -name "*.out" -o -name "core.*" -o -name "model*" -type f $expire_time`;
do
echo "将文件 $i 置空"
echo /dev/null > $i;
done
注意:此处采用将文件置空的方式来释放磁盘空间,而非直接将文件删除,是为了防止进程文件句柄泄露导致磁盘空间无法释放
。
任务调度是借助Ansible Tower实现的,感兴趣的同学可以去查阅相关资料,此处就不再赘述。
网友评论