PHPからバックグラウンド処理を実行させる(その2)

うまくいっていたのに、その後いろいろ試してみると、やっぱり時間がかかっている。待たされ感がある。バックグラウンドプログラムをコールするのは上手くないのかもしれない。

PHPからバックグラウンド処理を実行させる

ウェブ画面のレスポンスはどれだけ遅くても数秒程度で帰ってきて欲しい。しかし時間がかかる処理というものもある。その時はフロントエンドの画面では「処理を開始しました」と表示しておき、バックグラウンドで実行プログラムを起動する方法が有効。

PHPの場合、exec関数を使えば、PHPでもJavaでもシェルでもなんでも呼び出せる。

その呼び出し方だが普通に以下のようにコールするのはまずい。

exec(‘/usr/bin/php program.php’);

これだと、program.phpが終了するまで、フロントエンドは待たされることになる。つまりバックグラウンドになっていない。

exec(‘/usr/bin/php program.php &’);

「&」をつけてバックグラウンドで処理しろっ。でもだめ。これでも待たされることになる(これはなぜだかわからないんだけど、実際そうなる)。

exec(‘/usr/bin/php program.php >/dev/null 2>&1′);

正解はこれ。別にリダイレクト先は/dev/nullでなくてもよいし2>&1もなくてもOK。とにかく出力しない、ってことにしておけばよさそうだ。

一応マニュアルにも書いてある。

プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、 プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。 そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。

文章分かりにくい。まぁ、確認の意味も兼ねて、実証してみた。

Postfixのエラー

2010/09/02 | メール

Postfixのエラーが出ている。

“warning: do not list domain ドメイン名 in BOTH mydestination and virtual_alias_domains”

このエラーを出さないためにmydestinationをコメントアウトしたのだが・・・。調べてみるとコメントアウトするだけではなくて、以下の設定が必要っぽい。

mydestination =

=の後には何も記述しない設定。一応エラーは出なくなった。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net