2017-11-02 11 views
1

を経由して、私はシェルスクリプトに新しいですし、私のデジタル海のバケツから古いアイテムを削除しますどのスクリプトに取り組んで(スペース)スクリプトの手動作業ではなくcrontabの

スクリプトを手動で実行したときに作業しますが、私が使用したときにエラーを与えていますcrontabの と私は他の同様の質問を見たが、便利

スクリプトではありませんでしたています

#!/bin/bash 

/usr/local/bin/s3cmd -c ~/Bucket_Name ls s3://$1 | while read -r line; 
    do 
    createDate=`echo $line|awk {'print $1" "$2'}` 
    createDate=`date -d"$createDate" +%s` 
    olderThan=`date -d"-$2" +%s` 
    #echo $line 
    #echo $createDate 
    #echo $olderThan 
    #echo $1 
    #echo $2 
    if [[ $createDate -lt $olderThan ]] 
     then 
     fileName=`echo $line|awk {'print $4'}` 
     #echo $fileName 
     if [[ $fileName != "" ]] 
      then 
      #printf 'FILE' $fileName 
      if [[ $fileName == *"sql" ]] 
       then 
       /usr/local/bin/s3cmd -c ~/Bucket_Name rm "$fileName" 
      fi 
     fi 
    fi 
    done; 

マニュアルコマンド(作業):

./sqlclear.sh "Bucket_Name" "300 minutes" 

のcrontabコマンド:

* * * * * sh /sqldump/sqlclear.sh "Bucket_Name" "300 minutes" >> /var/log/sql-clear.log 2>&1 

エラーのCronログ(上からSQL-clear.log):

/sqldump/sqlclear.sh: 13: /sqldump/sqlclear.sh: [[: not found 
+5

'のcronに代わりsh''のbash'使用。 bashの ''へすなわちSH/sqldump/sqlclear.sh'/sqldumpあなたはcronの中に 'sh'を使用していると、あなたは' bash'ためシェバングを持っている/ sqlclear.sh' – 123

+3

。 – mathB

+1

'〜/ Bucket_Name' - これはあなたの問題かもしれません。 CrontabはあなたのユーザーではなくSUとしてスクリプトを実行します。スクリプト内のすべてのファイルへのフルパスを提供してください。 – AlexM

答えて

0

のcrontab で実行している間、私はバッシュを逃しましたそう のcrontabはする必要があります

* * * * * bash /sqldump/sqlclear.sh 
+1

'bash'を完全にスキップすることはできますが、それは必要ではありません。 '/ sqldump/sqlclear.sh'で十分です。 –

関連する問題