【发布时间】:2017-03-11 08:53:02
【问题描述】:
我有一个脚本,可以扫描所有目录和子目录以查找名称中带有“RC”的目录,并删除所有超过 40 天的文件,但始终保留最后一个,即使它超过 40 天。
我遇到的问题是,如果我手动运行脚本./cronJob.sh,它可以正常工作。但是当我把它放在 crontab 列表中时,它不会删除目录,而只会在日志中输出两行。
#!/bin/bash
datum=$(date -I)
MOUNTLOG=/var/log/softwareRC/
FIND=/bin/find;
deleteDir(){
echo "-------- START $parent --------" >> $MOUNTLOG/$datum.log
dname=$(/usr/bin/dirname $1)
temp="${dname%\s.*}"
temp=(${temp[@]})
parent="${temp[0]}"
dirNum="$($FIND $parent -maxdepth 1 -name *RC* -type d -print | wc -l)"
najnovejsi="$($FIND $parent -maxdepth 1 -name *RC* -type d -print | sort | tail -n 1)"
if [ $dirNum -gt 1 ]; then
$FIND "$parent" -path "$najnovejsi" -prune -o -name *RC* -mtime +40 -print -exec rm -r "{}" \; >> $MOUNTLOG/$datum.log
fi;
echo "-------- END $parent --------" >> $MOUNTLOG/$datum.log
}
declare -i skipDir=1
while true
do
oldest=$($FIND -type d -name *RC* -mtime +40 -printf '%T+ %p\n' | sort -r | tail -n $skipDir | head -n 1)
# echo najstarejsi $oldest
dironly=$(echo $oldest | cut -d' ' -f 2-)
deleteDir "$dironly"
# echo $skipDir $dironly
/bin/sleep 1
if [ "$dironly" = "$testna" ]; then
break
else
testna=$(echo $oldest | cut -d' ' -f 2-)
let "skipDir++"
fi;
# echo primerjava $testna
done
Crontab 作业
0 2 * * * /mnt/local/TempDrive/Software_RC/.cleanOld.sh
日志输出
[root@SambaServer softwareRC]# cat 2017-03-11.log
-------- START --------
-------- END --------
【问题讨论】: