cronによるPHPの実行について - PHPプロ!Q&A掲示板

2568

  • 0P

cronによるPHPの実行について

質問日時 / 2010年2月26日 09:01 (最終編集:2月26日 09:02)    回答数 / 6件

Questioner:  hayato0210  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

cronを使ってPHPスクリプトを定期的に実行しようとしております。
サンプルとして実行すると別ファイルに
実行した日時を吐き出すスクリプトを書きました。

ブラウザ上で実行するとちゃんと処理されます。
ただしcronを使って呼び出すと上手く動作しません。
パーミッションも700にしてあります。

cronの実行ファイルのソースが間違っているのでしょうか?

サーバーはハッスルサーバを使っております。
//cron.sh

#!/bin/sh
/home/ユーザー名/public/www/test.php
exit

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimixハッスルサーバは使ったことがないのでよくはわかりま
┃┗A01-1hayato0210お二方ともご回答ありがとうございます。 すみません
┃ ┗A01-1-1shimix>調べてみますと私の勘違いでした。 >PHPスクリプト
┃  ┗A01-1-1-1signal相対パスで指定してあるようなので、カレントが違って
┣A02moetenhayato0210さんこんにちは。 test.php自体が実行さ
┗A03hayato0210戸惑っていたのですがCSVの読み込みを絶対パスにした

回答一覧

並び替え:

A01
answerershimix [2月26日 09:39] (最終編集:2月26日 09:45)

ハッスルサーバは使ったことがないのでよくはわかりませんが、一般的にはcronで起動する場合には「コマンドライン」での実行にしないといけません。なのでcron.shに

 php -f /home/ユーザー名/public/www/test.php

もしくは

 /usr/local/bin/php /home/ユーザー名/public/www/test.php

などと書くのではないでしょうか?

#もしくは1行目に(Perlスクリプトみたいに)「#!/usr/local/bin/php」を書いたりとか・・



(追記)
いつも思うのですが、少しは調べてから質問された方がいいんじゃないかと思います。

  http://www.google.co.jp/search?hl=ja&q=%E3%83%8F%E3%83%83%E3%82%B9%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%20cron%20php

この意見に回答する

ツリーへ TOPへ

A01-1
replyerhayato0210 [2月26日 18:38]

お二方ともご回答ありがとうございます。
すみません><
調べてはいるのですがいつも見つからないんです・・・。
面倒だからとココで聞いているわけでは御座いません。
後、yahooではなくgoogleを使う人が多いのですが(よくググレと言う)
googleの方がよいのでしょうか?

調べてみますと私の勘違いでした。
PHPスクリプト自体は実行出来ていたみたいです。
cronの実行結果をメールで送ってみたら「ファイルが開けません。」
を返ってきておりました。

CSVに書き込む処理以外にCSVを配列に読み込む処理をしており
ここが開けなかった場合の文字を変えてみたのですが
その文字が返ってきました。

  1. // csvファイルの取得
  2.   $rfile = @file("file.csv") or die("ファイルが開けません。");
  3.   foreach ($rfile as $line) {
  4.     $warr = explode(",", trim($line));
  5.     foreach ($warr as $key=>$value) {
  6.       $warr[$key] = trim($value);    // 空白の除去
  7.     }
  8.     $array[] = $warr;
  9.   }

パーミッションはCSV、ソースとも755です。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [2月26日 19:22] (最終編集:2月26日 19:31)

>調べてみますと私の勘違いでした。
>PHPスクリプト自体は実行出来ていたみたいです。
>cronの実行結果をメールで送ってみたら「ファイルが開けません。」
>を返ってきておりました。

ほう・・。これは珍しいですね。ハッスルサーバはphpスクリプトをそのままコマンドラインで実行できるんですね。



閑話休題。

パーミッションによるエラーなのか、ファイルが見つけられないのか・・はチェックされてないようですね。file()で読み込む前にfile_exists()で存在をチェック、is_readable()で読み込みパーミッションがあるかをチェックして、メッセージを出力してみれば状況はわかると思います。


まずは、そういうことを試行してください。




(蛇足)
>パーミッションはCSV、ソースとも755です。

データファイルに755は・・。無駄にパーミッションを上げるべきではないと思います。不要なフラグは立てないようにしてください。多分スクリプトは(CGIモード、suExecのようですから)705が指定だと思います(∴データは604でいいですよね)。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyersignal [2月27日 03:01]

相対パスで指定してあるようなので、カレントが違っているだけのような気がします

この意見に回答する

ツリーへ TOPへ

A02
answerermoeten [2月26日 09:44]

hayato0210さんこんにちは。

test.php自体が実行されないという感じでしょうか?

  1. #!/bin/sh
  2. php /home/ユーザー名/public/www/test.php

でもだめでしょうか?


もしくはファイル取得コマンドwgetを使用して

  1. wget http://localhost/test.php

はいかがでしょうか?

この意見に回答する

ツリーへ TOPへ

A03
answererhayato0210 [3月3日 05:36]

戸惑っていたのですがCSVの読み込みを絶対パスにしたら出来ました。

ご回答ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)