データベース バックアップ bash は ssh 経由では動作しますが、cronjob では動作しません

データベース バックアップ bash は ssh 経由では動作しますが、cronjob では動作しません

共有ホスト上のデータベースをバックアップするためのスクリプトを作成しました。スクリプトは次のとおりです。

mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +%Y:%m:%d:%H:%M:%S).gz

データベースの資格情報は /home/[user] の .cnf に保存され、暗号化キーはスクリプトに示されているキー ファイルに保存されます。このスクリプトを SSH 経由で実行すると、すべてが正しく動作し、バックアップ ファイルが作成されます。ただし、毎日の初めに実行するように設定された cronjob によってファイルは作成されません。

何か案は?

どうもありがとう。

答え1

正しいユーザー アカウントで cron ジョブを作成するには、以下を使用します。

crontab -u <username> -e

また、% を '\' でエスケープします。

mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +\%Y:\%m:\%d:\%H:\%M:\%S).gz

答え2

私が考えた解決策は、コマンドの先頭に cd /home/[user]/ && {コマンドの残り} を追加することでした。/home/[user]/ は、mysqldump がダンプに必要とする .cnf ファイル内の mysql 認証情報が保存されている場所です。また、同時に '%' もエスケープしたので、おそらくこれも役立つでしょう。エスケープのヒントを提供してくれた @alex-atkinson に感謝します。

関連情報