性格いい人が優勝

crontabを実行してmysqlのバックアップを取ろうとしています。

まず、以下のunixコマンドでバックアップできることを確認しました。
mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql

これをcrontabで実行するためにphpファイルにして以下のように記述しました。
<?php
$output = shell_exec('mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql');
echo "<pre>$output</pre>";
?>

このファイルを実行すると以下のメッセージが返されます

/***/sql_backup.php: line 1: ?php: そのようなファイルやディレクトリはありません
/***/sql_backup.php: line 2: syntax error near unexpected token `('
/***/sql_backup.php: line 2: `$output = shell_exec('mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql');'

phpでコマンドを実行するにはshell_execを使うとあり、試してみたのですが、こういう方法では使えないのでしょうか?

最終的にはcrontabを使ってmysqlのバックアップが取れれば良いので、他に方法があるようでしたら教えて頂ければ助かります。

宜しくお願いします。

A 回答 (5件)

まずphpが置いてあるパスを確認しましょう


which php
を打ってみてください。
そして例えば、
/usr/bin/php
と表示されたらこれを覚えておいて自作のphpファイルと併せて次のように打ってみましょう
/usr/bin/php /home/user/appli/bin/backup.php
これで動くのではないでしょうか
    • good
    • 0

> それ以前に、telnetからパスをたたいて実行しようとしていて



具体的にどういうふうにたたいていますか
その1行をよろしければ省略せずに示して頂けますか

この回答への補足

ファイルの置いてあるパスを指定しています。

/home/user/appli/bin/backup.sh
/home/user/appli/bin/backup.php

といった形です。

補足日時:2011/10/28 18:07
    • good
    • 0

phpスクリプトのつもりで作ったものが残念ながらbash等のシェルスクリプトと


して解釈されているようです。

仮にphpのパスが/usr/bin/phpでphpファイル名がbkup.phpだとするなら
/usr/bin/php bkup.php
とすれば動くんじゃないでしょうか

この回答への補足

/var/spool/cron/userでは同様の設定をしているのですが....

それ以前に、telnetからパスをたたいて実行しようとしていて、上記のような症状が出ています。

補足日時:2011/10/28 16:39
    • good
    • 0

そもそもphpとして実行されていませんね。

お使いのサーバでのcronの書き方は確認されていますでしょうか?

つまり「拡張子が.phpであればcronでphpスクリプトとして実行される」ことは確認されていますか?

シェルスクリプトにして、

#!/bin/sh
/usr/local/bin/php (phpスクリプトのサーバパス)

などと書かないといけない環境などもありますので。


>最終的にはcrontabを使ってmysqlのバックアップが取れれば良いので、

phpで書く必要がなければ、単にshellで

#!/bin/sh
mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql

でもいいのでは?

なお「#!/bin/sh」が必要なのかどうか(またshell名が妥当か)はサーバの仕様を確認してください。

この回答への補足

ありがとうございます。

#!/bin/sh
mysqldump -u *** -p*** abc_db > /file/dump/db_backup_`date +%Y%m%d-%H%M%S`.sql

をbackup.shとして保存し実行できました。
が、/var/spool/cron/user 側の設定がわかりません。

0 1 * * *
のように起動時刻を設定した後、backup.shへのパスを書くだけでは実行できないようです。

補足日時:2011/10/28 16:15
    • good
    • 0

phpを経由させずにcrontabに直接mysqldumpを記述するのでは駄目なのでしょうか?

この回答への補足

今、試している所ですが、/var/spool/cron/user の書き方がわかりません。

補足日時:2011/10/28 16:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!