を cronに登録しましたが、ダンプに失敗しています。
OS:FreeBSD 8.3
シェルスクリプトの場所
/usr/home/www/scripts/bk_mysql.sh
所有者:権限
-rwxr-xr-- 1 user1 wheel 398 Jun 10 19:45 bk_mysql.sh
内容
#!/bin/sh
BACK_DIR=/usr/home/www/www.example.com/backup
MYSQL_ROOT_PW=aaaaaaa
# mysqldump
cd $BACK_DIR
mysqldump -u root --password=$MYSQL_ROOT_PW --all-databases > mysql_`date +%y%m%d%H%M`.sql
cron は1分毎にテスト実行しています
*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
しかし、ダンプファイルが作られません。
なお、同スクリプト内で、以下のアーカイブのパターンではアーカイブ生成に成功していますので、パーミッションなどには問題ないのかな?
DATA_DIR=/var/db
cd $DATA_DIR
tar cvzf $BACK_DIR/mysql_`date +%y%m%d-%H%M` mysql
と思っています。
mysqldump 特有の問題なのでしょうか?
ご教示お願いします。
$ which mysqldump
と入力して、表示されるパス (/sbin/mysqldump) といったパスで、
mysqldumpコマンドを置換すると良いと思いますよ。
*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
/etc/crontab に直書きしてるんでしょうか。
とりあえずrootがコマンドラインとして認識されている可能性を考えて、
shに置換してみてはいかがでしょう。
余談ですがrootでコマンドを実行するのは、あまりよくありません。
上記例では、mysqldumpによってディスクが本当にfullになってダウンするとか、
そういうことも起り得ます。 一般ユーザなら、95%で止めてくれたりします。(そういう設定がされている前提ですが)
mysqldumpにパスは通っていますか?
確認して下さい。
それから、mysqldumpは重たい処理なので、cronで1分おきというのは現実的ではありません。1時間おきにしてみて下さい。
アドバイスありがとうございます。
rootユーザーで、
# which mysqldump
とやると、
/usr/local/bin/mysqldump
と返ってくるので、パスは通っているという理解でしたが、
違うのでしょうか?
cronはrootユーザーで実行されるわけではないので、mysqldumpをフルパスで記述してください。
$ which mysqldump
と入力して、表示されるパス (/sbin/mysqldump) といったパスで、
mysqldumpコマンドを置換すると良いと思いますよ。
*/1 * * * * root /usr/home/www/scripts/bk_mysql.sh
/etc/crontab に直書きしてるんでしょうか。
とりあえずrootがコマンドラインとして認識されている可能性を考えて、
shに置換してみてはいかがでしょう。
余談ですがrootでコマンドを実行するのは、あまりよくありません。
上記例では、mysqldumpによってディスクが本当にfullになってダウンするとか、
そういうことも起り得ます。 一般ユーザなら、95%で止めてくれたりします。(そういう設定がされている前提ですが)
# 質問者さん向け
実行される親プロセスが違うことによるのですが、説明が長くなるので割愛します。
ログインシェルによりますけど、例えば bash だと、ログインプロンプトが出る前に、.bash_profile とか .bashrc が読み込まれて実行されます。
PATH などの環境変数の設定は、ここでやっているはず。
ログインプロンプトから実行されるシェルスクリプトは、ログインシェルの子プロセスとして起動されます。
スクリプトを動かすシェルは、親のログインシェル (例えば、bash) の環境変数を引き継ぎます。
cron の場合には、これが働かない (/usr/bin/cron の子プロセスとして実行されるだけ) ので、プロンプトで動いてたスクリプトが cron で動かないのは何故、みたいなことになります。
そうだったのかー!
すみません。何度もご回答いただき、理解できました。
ありがとうございました。
# 質問者さん向け
ログインシェルによりますけど、例えば bash だと、ログインプロンプトが出る前に、.bash_profile とか .bashrc が読み込まれて実行されます。
2013/06/12 13:31:16PATH などの環境変数の設定は、ここでやっているはず。
ログインプロンプトから実行されるシェルスクリプトは、ログインシェルの子プロセスとして起動されます。
スクリプトを動かすシェルは、親のログインシェル (例えば、bash) の環境変数を引き継ぎます。
cron の場合には、これが働かない (/usr/bin/cron の子プロセスとして実行されるだけ) ので、プロンプトで動いてたスクリプトが cron で動かないのは何故、みたいなことになります。
そうだったのかー!
2013/06/14 07:47:08すみません。何度もご回答いただき、理解できました。
ありがとうございました。