PHPファイルをcronで定期的に実行する方法

このQ&Aのポイント
  • centosでtest.phpを30分おきに実行する方法を教えてください。
  • crontabの設定が間違っているため、test.phpが実行されない問題が発生しています。
  • PHPのインストールはソースから行い、正常に動作していますが、cronでの実行ができません。どうすればいいでしょうか。
回答を見る
  • ベストアンサー

PHPファイルをcronで定期的に実行したい

centosでtest.phpを30分おきに動作させようと思います。 test.phpは /var/www/html/においてあります。 test.phpはコードの中で、require_once 'phpkit/kits.inc';と /var/www/html/phpkit/kits.incを呼び出しています。 [root]# find / -name php /root/src/senna-1.1.4/bindings/php /usr/share/swig/1.3.40/php /usr/share/php /usr/bin/php /usr/include/php /usr/lib64/php /var/lib/php [root]# /etc/rc.d/init.d/crond status crond (pid 1181) is running... [root]$ crontab -e 30 * * * * /usr/bin/php /var/www/html/test.php しかし、以上のように設定してもtest.phpは一度も実行されません。 phpのインストールは、ここの「PHPをソースからインストール」を利用しました。 http://www.akiyan.com/blog/archives/2008/09/tritonnmysqlsen.html /var/www/html/にinfo.phpを置いてアクセスしたところ、正常に情報が表示されます。 /var/www/html/にtest.phpを置いて、手動でアクセスしたところ、test.phpは正常に動作します。 ですので恐らくcrontabの設定が間違っているのだと思いますが、これ以上どうすればいいのかがわかりません。 cronでtest.phpを動作させるのに、この後どうすればいいのでしょうか。 どなたかご教示のほど、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.3

No1です。 お礼にお書きの情報からすると、実行されているとしか思えないですね。

spinia0120
質問者

お礼

ご回答ありがとうございます。 苦心して調べたところ、ようやく解決することができました。 本当にありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

CLIモードにこだわらないのであれば WGETなどでhttp経由で処理すればよいのでは?

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.1

cronのログ(/var/log/cron)には、起動時刻にどう表示されてますか? rootあてにcronジョブ実行エラーのメールは来ていませんか? シェルで、 /usr/bin/php /var/www/html/test.php と打ち込むと実行されますか? シェルで、 env - PATH=/usr/bin:/bin /usr/bin/php /var/www/html/test.php と打ち込むと実行されますか?

spinia0120
質問者

お礼

ご回答ありがとうございます。 返信が遅れて申し訳ありません。大分確認に時間がかかってしまいました。 >cronのログ(/var/log/cron)には、起動時刻にどう表示されてますか? Mar 18 06:30:01 example CROND[20936]: (root) CMD (/usr/lib64/sa/sa1 -S DISK 1 1) Mar 18 06:30:01 example CROND[20938]: (root) CMD (/Usr/bin/php /var/www/html/test.php) となります >rootあてにcronジョブ実行エラーのメールは来ていませんか? すみません、今までずっと格闘していましたが、どうしてもこれだけ設定することができませんでした。 >シェルで、 /usr/bin/php /var/www/html/test.php と打ち込むと実行されますか? 正常に実行されます >シェルで、 env - PATH=/usr/bin:/bin /usr/bin/php /var/www/html/test.php と打ち込むと実行されますか? 正常に実行されます 現在、私からわかるのは以上となります。 よろしくお願いします。

関連するQ&A

  • さくらVPSでcronでphpを実行

    さくらVPSでcronでphpを実行したいのですが、うまくいきません? vi /etc/crontab    ↓ 30 * * * * root /usr/bin/php/var/www/html/oms-main2/end.php 実行できないので /etc/rc.d/init.d/crond status → crond (pid 2559) を実行中 ちなみにend.phpは、手動では動きます。 宜しくご教授お願い致します。

  • 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 ---------------------------------------------

    • ベストアンサー
    • PHP
  • さくらVPSでcron指定はsh? php?

    これまで別のレンタルサーバで動作していたcronをさくらVPSでも動作させたいのですがうまくいきません。 ■これまで(レンタルサーバ) 1.cronにshファイルを指定 2.shファイル cd /var/www/★★ /usr/local/bin/php -d include_path='.:./●●.php ■今回(さくらVPS) /etc/crontab/ 05 7 * * * root /usr/bin/php /var/www/■■.sh ・どうしたら動作するでしょうか? ・/etc/crontab/の指定先は「phpファイル」「shファイル」の何れを指定するのでしょうか?

  • cronがうまく動作していないっぽいです。

    Fedora8の環境でcronの設定をしましたが思い通りに動いていないみたいなので教えてください。 まず、cronの設定は crontab -l SHELL=/usr/bin/perl */5 * * * * root /var/www/cgi-bin/test.cgi です。 このtest.cgiは、コマンドラインで./test.cgiとすると同じディレクトリ内のファイルに動作した時間とその旨のログを追記します。 perlで書いてあり、現在の属性は755 ftpuser:ftpuserとなっています。 とりあえず5分間隔で動作するように設定したつもりです。 しかし、いくら待てどもそのログファイルに追記されません。 ちなみに、/var/log/cron には CROND[3511]: (root) CMD (root /var/www/cgi-bin/test.cgi) なカンジで5分ごとにログが出ています。また、5分毎にメールが来ていて(Cronデーモンから?) /var/www/cgi-bin/test.cgi syntax OK と記載されています。 test.cgiからログを吐かせるには何が必要かご教授願います。

  • シェルスクリプトでPHPを実行したい

    シェルスクリプトでPHPを実行したいのですが、うまくできません。 centos5でcrontabに 20 0 * * * /bin/sh /var/www/html/test/test.sh と登録しています。 cronのlogをみたところ Dec 12 00:20:01 localhost crond[19060]: (root) CMD (/bin/sh /var/www/html/test/test.sh) と記録されていてここまでは問題ないように思えます。 test.shの中身は #!/bin/sh cd /var/www/html/test/ php -f daily.php > result exit になっています。 daily.phpが実行されないので、daily.phpに何かおかしなところがあるのかと思い daily.phpを直接ブラウザから起動してみたところ問題なく処理されました。 このような経緯でtest.shの中身が間違っていると思っているのですがどこが間違っているのか分かりません。 どなたかアドバイス頂けると助かります。

  • fedora11でのcron設定

    fedora11,apache,php5の環境でcronを使いたいのですが、動きません。。 状況が、 fedora11 php5 apache を使用していて、cronを使ってphpの定期実行を行いたいのですが、どうしてもうまくいきません。 かなりググってはみたのですが、liuxについては初心者なので、どうにもわかりません。 設定内容が、 /etc/crontabが、 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ * /1 * * * * apache /usr/bin/php /var/www/html/cron.php で、/var/log/cron でログを確認したところ Jul 28 19:00:01 host CROND[8417]: (apache) CMD (/usr/bin/php /var/www/html/cron.php) となっていてこれが一分ごとに出てきます。 cron.phpにはファイル追記の処理を書いてあります。 エラーではないようなのですが、ファイル操作が行われていないようなので動いていないようなのです。 ローカルホストでphpを実行したらちゃんと動くのでphp内のミスではないようです。 パーミッション関係だったらログにエラーが出そうなものですし、、、。困っています。。 どなたかお知恵を貸していただけませんでしょうか、よろしくお願いします。

  • cronで実行できない

    crontab -e  で記述をしたけれど動作しないので色々調べて毎分動くようにしてみたり色々試した物の動きません。現在以下のような記述になってます。どう直したらいいですか。OSはDebian sargeでcronでなく手で動作させると正常です。 SHELL=/bin/sh */1 * * * * /usr/bin/biffpop -c /root/.biffpoprc > /dev/null 2>&1

  • crontab -e コマンドで編集してもCronが動作しません。

    testユーザーで手動でコマンド実行すると正常に動作するのですが、 crontab -eで、下記のようにCronを登録しても動作しません。。 00 12 * * * /var/www/html/bin/cron.sh args1 /var/log/cronを見ても Jun 19 12:00:01 web1 crond[3095]: (test) RELOAD (cron/test) というように、RELOAD となりまりコマンドが実行してくれません。。 Jun 19 13:01:01 web1 crond[9116]: (root) CMD (run-parts /etc/cron.hourly) というように、CMDが出ているのですが。。

  • さくらVPS cronでphp

    centos6 さくらVPS cronでphpを実行したいのですが、うまくいきません? vi /etc/crontab    ↓ 44 * * * * /var/www/html/oms-main2/end.php ちなみにend.phpは、手動では動きます。 cronlog  ↓ Apr 15 10:44:01 www32258ue CROND[6787]: (root) CMD (/var/www/html/oms-main2/cron.php) 宜しくご教授お願い致します。

  • cronでpg_dumpの実行

    こんにちわ。 Linuxでcronを設定しPHPからexecで「pg_dump」を実行しようとしています。 エラーになり実行ができません。 設定は /var/spool/cron ディレクトリに 『crontab -e -u postgres』でコマンドを実行し SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO='' HOME=/ 08 19 * * * postgres /usr/bin/php /home/var/b_dump.php とcrontabに記載しています。 コマンドの実行はrootユーザで 権限は777 にしています。 メールを届くようにしているのですが、届くメールは 『postgres does not know where to find the server configuration file. You must specify the --config-file or -D invocation option or set the PGDATA environment variable.』 と届きます。 googleで検索したのですが、解決方法がわかりません…。 読みにくい文章で申し訳ないのですが、解決方法のご教授を お願いします。