PHPをバージョンアップしたらCRONが動かない
CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。
PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。
[バージョンアップ内容]
CentOSを5.3から5.7にバージョンアップ
PHPを5.1.6から5.3.3にバージョンアップ
phpMyAdmin3.4.8をインストール
MySQL 5.0.77(バージョンアップせず)
バージョンアップ前には
・PHPからMySQLにデータを登録するプログラムは動作していた。(ウェブサイト形式で動作確認)
・上記のプログラムはCRONで動いていた。(CRONでも動作確認)
PHP5.1.6の時はCRONに下記のように登録していました。
10 * * * * /usr/bin/php /var/cron_file/test_cron.php
アップデート後にウェブサイト形式でプログラムが動くことを確認しました(ページを開くと下記のプログラムが動作し、データをMySQLに登録)
phpMyAdminも問題なく動きます。
CRONの問題点を探し出すために下記のことを行いました。
CRONのステータスを確認
# /etc/rc.d/init.d/crond status
crond (pid 32151) を実行中...
CRONをリスタート
# /etc/init.d/crond restart
crond を停止中: [ OK ]
crond を起動中:
CRONのエラーの確認
# vi /var/log/cron
PHPの場所の確認
# find / -name php
/usr/share/php
/usr/include/php
/usr/bin/php
/usr/lib64/php
/var/lib/php
どれがPHPの場所なのかがわからないので、とりあえず5.1.6の時に指定していた「/usr/bin/php」を採用
このあたりはネットで情報を探して、登録してみたので正しいのかどうかよくわかりません。↓
PATHの記入
(その1)
# vi /root/.bash_profile
PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin
export PATH
(その2)
#vi /etc/profile
PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin
export PATH
PATHの確認
# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/php
(上記以外にもいろいろいじっていたら、このようになってしまいました。上記以外のところでどこで設定したかがわからないので、PATHを消す方法も教えていただければと思います)
「/usr/kerberos/sbin:/usr/kerberos/bin」はもともとシステムで登録されていたもので、上記で登録した「/sbin:/usr/sbin:/bin:/usr/bin」以外のもの「/usr/bin/php」などはどこで登録したかわからなくなってしまったものです。
CRONでPATHを指定する部分でPHPのバージョンによりPATHの値が異なるという情報を見つける
/usr/bin/php
/usr/bin/php5
/usr/bin/php53
各パターンで
「10 * * * * /usr/bin/●● /var/cron_file/test_cron.php」
をcrontab -eに登録してエラーを見てみる。
(1)「*/1 * * * * /usr/bin/php /var/cron_file/test_cron.php」
# vi /var/log/cron
→エラーに何も表示されない
(2)「*/1 * * * * /usr/bin/php5 /var/cron_file/test_cron.php」
→ エラーに何も表示されない。
(3)「*/1 * * * * /usr/bin/php53 /var/cron_file/test_cron.php」
→エラーが表示される
Dec 16 20:20:01 ドメイン crond[11412]: (root) CMD (/usr/bin/php5 /var/cron_file/test_cron.php)
クローン自体は動いていて、エラーがでているような感じは把握できたのですがここで行き詰まりました。
PHPのパス関係か、MySQLのパス関係、PHPとMySQLの連係、そのあたりのどこかが原因なのでしょうか?
参考資料としてphpinfo()の情報を記載します。
Loaded Configuration File /etc/php.ini
PATH /sbin:/usr/sbin:/bin:/usr/bin
参考)プログラムの内容
---------------------------------------------
require_once ('/var/DB接続情報保存ディレクトリ/password.php')
try
{
$dbh = new PDO($DSN , $DBUSER , $DBPASS);
$query=<<<EOF
INSERT INTO
test
(name)
VALUES
(:name)
EOF;
$stmt = $dbh->prepare($query);
$name='斉藤太郎';
$stmt->bindParam(':name', $name);
$stmt->execute();
}//try_end
catch(PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br>";
die();
}//catch_end
---------------------------------------------
補足
回答ありがとうございます。 >手動で起動するとちゃんと動くのでしょうか? ・手動で起動とはどうやるのでしょうか? 試しに下記を打ったら # su - root -c "/var/www/■■.sh" エラー -bash: /var/www/■■.sh: /bin/sh^M: bad interpreter: そのようなファイルやディレクトリはありません ■■.shファイル内容 #!/bin/sh #php cd /var/www/★★ 以下略~