※ ChatGPTを利用し、要約された質問です(原文:PHPをバージョンアップしたらCRONが動かない)
PHPをバージョンアップしたらCRONが動かない
このQ&Aのポイント
CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。
PHPをバージョンアップした際に、CentOSとphpMyAdminは正常に動作していることを確認しました。しかし、CRONのみが動かない状況です。CRONのステータスを確認し、エラーログも確認しましたが、具体的な解決策は見つかりませんでした。PHPのパス関係やMySQLのパス関係などを調査しましたが、結果が出ずに行き詰まっています。
現在の状況はCRON自体は動いていて、エラーログにも表示があることが分かりましたが、具体的なエラー内容がわかりません。PHPのバージョンによりCRONのパスの値が異なることも分かり、いくつかのパターンで実行してみましたが、解決には至っていません。PHPのパス関係やMySQLのパス関係、さらにPHPとMySQLの連携に問題があるのかもしれません。解決策が分かる方がいれば、教えていただきたいです。
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
---------------------------------------------
お礼
回答ありがとうございます。 which phpでパスを確認し、実行権限をrootにしてみたら動きました。 Linuxは触り始めたばかりなので、ネット上で調べていてどれがPHPのパスなのかがわからなくなっていました。which phpで場所が分かったので、残りの実行権限の変更に辿り着けました。数日間苦しんでいたので、プログラムが動いて嬉しいです。 本当に感謝です。ありがとうございました!