是否可以打破基于条件执行的bash命令?

时间:2014-10-22 02:03:02

标签: bash memory-management

## 20141017
## run as a cron script every 5 minutes
## NB: Filesystem mounted on /u01 periodically exceeds 80%
##
#!/bin/bash

fs=u01

function deletion() {
        pushd ~ > /dev/null
        largedir=`du -k /u01 | sort -rn | head -n2 | awk '{print $2}' | grep -v "^/u01$"`
        echo $largedir
        rm -rf $largedir
        popd > /dev/null
}

usage=`df -h | awk '$1 ~/dev\/sdc1/' | awk '{print $5}' | sed 's/%//g'`
while [ $usage -gt "40" ]
do
        echo "Filesystem $fs has currently reached $usage% usage."
        echo "Deleting files.."
        deletion
done

假设FS使用率为41%,largedir的大小为13G。如果我允许删除不间断运行,那么FS使用率可能会下降到1%;当我运行deletion()时,我希望该程序能够同时检查使用情况,一旦使用率降至40%以下,它就必须退出。 我的做法是对的吗?或者以某种方式从最小的删除目录更容易 - >最大尺寸是通过尾巴而不是头部?

1 个答案:

答案 0 :(得分:0)

在while循环中,您可能必须在运行删除后重新计算使用情况。

如果您不想一次删除整个目录并冒险将您降回1%,那么查找/删除单个文件,并在每次删除后检查df是否低于40%。

否则,我认为可能没问题。