コマンドラインから実行したPHPが時間経過すると終了してしまいます。

コードのおおまかな内容としては、
1. $fp = pfsockopen($host, $port) で、TCP接続
2. 受信した内容を while($foo = fgets($fp)) で取得しdump

というところです。
これを以下のような感じで、コマンドライン上から実行しています。
$ php -q script.php

数時間~8時間程度は実行されているようですが、その後、実行終了してしまっているようです。

このようなコーディングは初めてで、どこからデバッグして良いか悩んでいるところです。
どなたか、参考Webやお知恵を拝借できればと思います。
よろしくおねがいします。

回答の条件
  • 1人3回まで
  • 登録:2008/03/29 10:17:17
  • 終了:2008/03/31 11:19:11

ベストアンサー

id:khoshi3 No.1

khoshi3回答回数71ベストアンサー獲得回数122008/03/29 10:26:03

ポイント70pt

php.ini(/etc/php.iniなどにあります)の「max_execution_time」を長めの必要な値に設定してみてください。defaultは30秒ですが、これはphpスクリプトが消費した実ユーザ時間です(=「ps -ef」等で見れる TIMEの値です)。

  • PHP オプションと情報(info):

http://php.plus-server.net/ref.info.html

max_execution_time integer

スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します。この命令は、いい加減に書かれた スクリプトがサーバーの負荷を上げることを防止するのに役立ちます。

デフォルトでは、30 に設定されています。最大実行時間は、システムコール、ストリーム操作等の 影響を受けません。

id:tomcat_a88

早速ありがとうございます。

max_execution_time の設定は、Webサーバーから呼び出した際の実行時間です。

コマンドラインから使用した場合、max_execution_time ディレクティブは上書きされ、0 (無制限) に設定されます。

 

PHP Manual 25.PHPをコマンドラインから使用する

http://www2.rit.shiga-irc.go.jp/~fukao/docs/php_manual/features....

 

実際、先に書きましたように、数時間~8時間程度は実行されていて、気がつくと終了してしまっているような状態です。

コード内でエラーが出たのか、サーバー側の制限なのかわからないのですが…

環境は、 CentOS 4.4 PHP4.3 です。

2008/03/29 11:00:23

その他の回答(1件)

id:khoshi3 No.1

khoshi3回答回数71ベストアンサー獲得回数122008/03/29 10:26:03ここでベストアンサー

ポイント70pt

php.ini(/etc/php.iniなどにあります)の「max_execution_time」を長めの必要な値に設定してみてください。defaultは30秒ですが、これはphpスクリプトが消費した実ユーザ時間です(=「ps -ef」等で見れる TIMEの値です)。

  • PHP オプションと情報(info):

http://php.plus-server.net/ref.info.html

max_execution_time integer

スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します。この命令は、いい加減に書かれた スクリプトがサーバーの負荷を上げることを防止するのに役立ちます。

デフォルトでは、30 に設定されています。最大実行時間は、システムコール、ストリーム操作等の 影響を受けません。

id:tomcat_a88

早速ありがとうございます。

max_execution_time の設定は、Webサーバーから呼び出した際の実行時間です。

コマンドラインから使用した場合、max_execution_time ディレクティブは上書きされ、0 (無制限) に設定されます。

 

PHP Manual 25.PHPをコマンドラインから使用する

http://www2.rit.shiga-irc.go.jp/~fukao/docs/php_manual/features....

 

実際、先に書きましたように、数時間~8時間程度は実行されていて、気がつくと終了してしまっているような状態です。

コード内でエラーが出たのか、サーバー側の制限なのかわからないのですが…

環境は、 CentOS 4.4 PHP4.3 です。

2008/03/29 11:00:23
id:khoshi3 No.2

khoshi3回答回数71ベストアンサー獲得回数122008/03/29 17:12:12

コメント欄が閉じているのでこちらから失礼します。ポイントは不要です。

tomcat_a88さんは書きました:

> max_execution_time の設定は、Webサーバーから呼び出した際の実行時間です。

> コマンドラインから使用した場合、max_execution_time ディレクティブは上書きされ、0 (無制限) に設定されます。

すみません、仰るとおり、CLIなphpはmax_execution_time=0なのですね。勉強になりました。コマンドラインな処理はいつもperlを使ってしまうので…。

phpスクリプト自身のどこかでfail-safeのためにset_time_limit()で設定しているということもないですよね。

的外れな回答をしてしまい申し訳ございませんでした。

あとは、サーバ側の制約で長時間実行のスクリプトが終了してしまうとすれば、以下の点を確認してみて頂く必要があると思います。:

  • php: memory_limit: スクリプトが確保できる最大メモリ[バイト数]: →これはさすがに大丈夫だと思うのですが…。
  • ulimit: OSユーザリソース制限: →レンタルサーバなどではユーザプロセスが消費するCPU時間を制限していたりします。「ulimit -a」で「cpu time」「max memory size」など引っかかりそうな制限値になっていないか念のため確認してみてください。

※ご参考までに: [ThinkIT] 第5回:カーネルをチューニングする (1/4): http://www.thinkit.co.jp/free/tech/23/5/

id:tomcat_a88

追記をありがとうございます。

# ulimit -a で、サーバー側の制約を見てみました。

ひっかかりそうな制限値はなさそうな感じでしたね…。

ちょっと、コードの方をデバッグできるよう書き換えて、処理の都度、ダンプさせてみます。

一旦、質問を締め切ります。ありがとうございました。

2008/03/31 11:18:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません