人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記のPHPソースで、cronを使用して、定期的にPHPソースとMySQLのダンプファイルの二点をバックアップを取っておりますが
PHPソースはバックアップが取れますが、SQLが取れません。
また、SSHで実行した場合はSQLのバックアップは取れます。(Cronでのみ取れません。)
ご教授いただけますでしょうか?

system('mysqldump -u ' . db_user . ' -p' . db_pass . ' ' . db_name . '> ' . save_pass . 'db/' . db_name . '.sql');

●質問者: makocan
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●50ポイント

真っ先に考えられるのは、環境変数の問題です。使っている OS や、ユーザの crontab に設定したのか、/etc/cron.daily のようなところにスクリプトを置いたのか、といったことで違いますが、例えば、手元の CentOS では /etc/crontab ファイルによって起動されるもの(/etc/cron.daily といったディレクトリの下にあるファイルの実行を含む)の場合、「PATH=/sbin:/bin:/usr/sbin:/usr/bin」となっています。

ディストリビューションに付いてきている mysql であれば問題ないと思うのですが、ソースからビルドして /usr/local/bin の下に mysqldump があるような場合、PATH が通っていなかったり、LD_LIBRARY_PATH が不足していると、実行に失敗する事になります。

ちなみに、手元の CentOS 6.2 でユーザの cron 設定(crontab -e とかで作る設定)の時の環境変数は下記の通りでした。

SHELL=/bin/sh
USER=july
PATH=/usr/bin:/bin
PWD=/home/july
SHLVL=1
HOME=/home/july
LOGNAME=july
_=/usr/bin/env

この結果は、下記のような crontab の設定をすると得られます。

 * * * * * env >/tmp/env

設定を放置すると、毎分 /tmp/env というファイルを書き込みに行くので、/tmp/env の中身を確認したら、上記設定を外すことをお忘れなく。

ということで、一度、環境変数を確認する事をおすすめします。


2 ● zebevogue
●50ポイント

ダンプしているディレクトリのパーミッションを確認してみてはいかがでしょうか。
具体的にはcronを実行しているユーザが書込みできるかどうかです。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ