名前に「RC」が付いているディレクトリとサブディレクトリをすべてスキャンし、40日以上経過したものはすべて削除しますが、40日以上経過しても必ず最後のものを残すスクリプトがあります。シェルスクリプトがcrontabと連携していない
私が心配している問題は、私が手でスクリプトを実行すると、それが正常に動作することです。./cronJob.sh
しかし、私がcrontabリストに置くと、ディレクトリは削除されませんが、ログには2行しか出力されません。
#!/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
ログ出力
[[email protected] softwareRC]# cat 2017-03-11.log
-------- START --------
-------- END --------
私はcrontabジョブを編集しました。 月曜日に仕事をしたら投稿します。 ありがとうございました。 –
は今働いていますか? –
不幸にも私はcronjobが予定される前にそれをテストする方法を知らない。 –