出産前後の痔にはご注意!

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

---------------------------------------------

このQ&Aに関連する最新のQ&A

A 回答 (1件)

phpが正しくインストールされて動作しているなら、


which php
でインストールされているパスが判るはずです。
パスをあわせればcronは動くと思いますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
which phpでパスを確認し、実行権限をrootにしてみたら動きました。
Linuxは触り始めたばかりなので、ネット上で調べていてどれがPHPのパスなのかがわからなくなっていました。which phpで場所が分かったので、残りの実行権限の変更に辿り着けました。数日間苦しんでいたので、プログラムが動いて嬉しいです。
本当に感謝です。ありがとうございました!

お礼日時:2011/12/19 22:07

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング