MySQLデータベースを実行するRHELサーバーがあります。mysqldump
バックアップファイルを作成するために実行されるBashスクリプトがあります。 Bashから直接スクリプトを実行したときに生成されるバックアップファイルのサイズは754259バイトです。 cronを介して同じスクリプトを実行すると、サイズはわずか20バイトです。
私が知っている限り、cronはスクリプトを手動で実行するためにログインするときに使用するのと同じユーザーコンテキストで実行されます。しかし、サイズの違いを考えると必ずしもそうではないようです。
同じスクリプトを実行するときにファイルサイズが異なるのはなぜですか?
シェルスクリプトの内容:
backup_path=/var/custom/db_backups
configFile=/var/custom/auth.cnf
db_name=[db_name]
date=$(date +"%d-%b-%Y")
sudo /opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz
クローン編集:
sudo crontab -e
クローンファイルの内容:
12 21 * * * /var/custom/maint_plan
これにより、毎晩午後9時13分にスクリプトが実行されます。
答え1
このmysqldump
コマンドは何も返さず、パイプで接続されて空のgzip
gzip ファイルで終わります。望むより:
$ echo -n "" | gzip -9 > test.gz
$ stat -c %s test.gz
20
これにより、20バイトサイズのファイルが作成されます。だから問題はmysqldump
コマンドにあります。ルートのcrontabなので、スクリプトはroot権限で実行されます。sudo
必要ありません。それを使用する必要はありませんsudo
。
/opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz
答え2
cronを介して実行されるスクリプトは失敗します。 20バイトは空のMySQLダンプのサイズです。
答え3
cronはスクリプトを実行するための環境が非常に限られています。必要なすべてのプログラムが見つからない可能性があります。良いダンプを得たシェルの環境変数をキャプチャし、cronスクリプトに転送します。