我有一个将日志写入的 cron 作业/tmp
。我想在磁盘中的可用空间小于 1GB 时自动删除最旧的文件。
我正在尝试这样做df -ah /tmp
,然后取第二行,使用cut
获取avail
列。然后在for
循环中,继续删除超过 n 天的文件,-mtime
直到有足够的可用空间。
我可能还想将其设置为每天运行的 cron 作业。
答案1
不要使用 find -mtime,而是使用 ls -t,例如:
DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then
break
fi
# rm -f $f
done
取消注释rm -f $f
以使其真正发挥作用......
但是,我通常会采取一些不同的做法。我会将我的 cron 日志放在 /var/log 中,并让 logrotate 之类的程序处理磁盘空间管理。或者,作为另一种选择,我会将日志放入单独的子目录(例如 /tmp/mycronjob/*),然后保留固定天数的日志文件。它不像监控磁盘空间那样灵活,但它也是一种直接find /tmp/mycronjob -mtime +30 -exec rm {} \;
且更可预测的方法。