cronjobでスケジュールすると、スクリプトは期待どおりに実行されません。

cronjobでスケジュールすると、スクリプトは期待どおりに実行されません。

imagemagicks recognitionコマンドを使用して、破損したjpg画像を認識するスクリプトを作成しようとしています。スクリプトは出力で「破損した」という単語に対してgrepコマンドを実行し、ファイルが破損している場合は破損したフォルダに移動するか、ファイルが正常に表示されると入力フォルダに移動します。

端末ウィンドウでスクリプトを手動で実行すると、期待どおりに機能します。理想的には、このスクリプトをcronジョブとして実行したいのですが、cronjobで予約するとすべてが入力フォルダに移動するため、IF文が正しく評価されないようです。 cronjobとして機能するには、スクリプトで他のタスクを実行する必要がありますか?

#!/bin/bash
LANG=en_US.UTF-8

#variables for our folders
DROP_FOLDER=~/Desktop/Drop
CORRUPT_FOLDER=corrupt_images/
INPUT_FOLDER=Input/

cd $DROP_FOLDER
for f in *.jpg
do
    if /opt/ImageMagick/bin/identify -verbose $f | /usr/bin/grep -iq "Corrupt"; then
        mv "$f" $CORRUPT_FOLDER
    else
        mv "$f" $INPUT_FOLDER
    fi
done

crontabでスケジュールを予約しています

*/2 * * * * cd ~ && ./myscript.sh

ベストアンサー1

cronジョブとしてスクリプトを追加する場合、スクリプトを実行しているcronユーザーは、スクリプトのテストに使用できる一般ユーザーアカウントとは異なります。
その後、このコマンドが実行されたとき

DROP_FOLDER=~/Desktop/Drop

ランタイム拡張はcronユーザー(rootなど)の~ためであるため、それを目的のディレクトリのフルパスに置き換える必要があります。$HOMEDROP_FOLDER=~/Desktop/Drop

おすすめ記事