cron で実行するとスクリプトが期待どおりに動作しない

cron で実行するとスクリプトが期待どおりに動作しない

問題があります。スクリプトの実行をスケジュールしましたが、時間になっても何も起こりません。

 #!/bin/sh
 TIME=`date +"%d-%m-%Y"`
 cd /var/www/flyer/data/www/
 mysqldump -u root -ppasswd --databases db_name --create-options --default- character-set=utf8 --result-file=dump.sql
 FILENAME="backup_$TIME.tar.gz"
 tar -cpzf ../backups/$FILENAME somefolder dump.sql  
 rm dump.sql
 chown flyer:flyer ../backups/$FILENAME
 chmod 666 ../backups/$FILENAME

ssh から /root/backup.sh としてスクリプトを直接実行すると、すべて正常に動作します。しかし、cron で実行すると、何も起こりません。 grep CRON /var/log/syslog実行されたことが表示されます (Dec 19 01:21:01 vps-8463 /USR/SBIN/CRON[1299]: (root) CMD (sh /root/backup.sh >/dev/null 2>&1) ) が、アーカイブは作成されません。Cron タスク:21 1 * * * sh /root/backup.sh >/dev/null 2>&1
なぜこのようなことが起こるのか、何か考えはありますか?

答え1

私の最初の推測は、スクリプトが cron によって実行されるときに、mysqldump コマンドがパスに存在しないということです。次を試してください。

which mysqldump

その出力を取得し、コマンド名をパス全体に置き換えます。例 /usr/bin/mysqldump:mysqldump

または、ローカル PATH 変数に何かを追加します。例: PATH=$PATH:/usr/bin

tarこれにより、、、chownまたはその他のコマンドがデフォルト パスにない場合の問題も解決されます。

関連情報