手動で実行すると正常に動作するデータベースバックアップスクリプトがありますが、cronで実行すると機能せず、ログに次の内容が表示されます。
Mar 11 11:58:02 ip-172-XX-Y-ZZ mysqldump: Could not retrieve file stat of "/home/admin/-": [Errno 2] No such file or directory: '/home/admin/-'
Mar 11 11:58:02 ip-172-XX-Y-ZZ mysqldump: mysqldump: Got errno 32 on write
スクリプトは次のとおりです。
#!/bin/bash
# Note: aws credentials are set with `aws configure` after installing aws cli
mysqldump -umysqldumpuser -pmysqldumpuserpassword --all-databases | gzip -c | aws s3 cp - s3://s3-bucket-name/mysql/all-databases--`date +%Y-%m-%d--%H-%M-%S%Z`.sql.gz
crontab には以下が含まれます。
58 0 * * * ~/scripts/mysqldump-all-databases-to-aws-s3.sh 2>&1 | /usr/bin/logger -t mysqldump
これはAWS LightSailのDebian Jessieサーバーです。 Amazon Linux を実行しているサーバーに同じスクリプトと crontab があり、そのサーバーで正常に動作します。
Debianサーバーのタイムゾーンをローカルタイムゾーンに変更し、Amazon LinuxサーバーではUTCに設定しました。おそらくこれがcronに問題を引き起こしているのでしょうか?
このスクリプトがなぜ失敗するのか知っていますか?ありがとうございます。