2017-03-31 2 views
0

長時間実行されているPHP CLIスクリプトをWebスクリプトから呼び出し、CLIスクリプトをデーモン化する最善の方法を読み込むと、私は、ApacheがCLIスクリプトを処理する方法に不溶性の問題が発生しました。私は私の地元のCentOS 7/PHPでこれを行うと7/Apacheが同じで、しかし、それは魔法のように動作し、VMを2.4.6WebスクリプトからPHP CLIスクリプトを呼び出そうとすると、Apacheによって複数の子プロセスが生成される

print `echo /usr/bin/php -q longThing.php | at now`; 

this blog postによると、最良の選択肢のような何かを行うことです私のプロダクションサーバのCentOS 6.8/PHP 7/Apache 2.4.25(cPanel)のコードでは、Apacheが100秒の子プロセスを生成し、CPUとメモリリソースが急速に使い果たされ、修正するための再起動が必要になります。たとえ私がすぐにPHP CLIプロセスを終了させたとしても、Apacheはすでに何らかのループに陥っています。私の理解では、上の提案されたコードを使用することによって、あなたはCLIプロセスからApacheの関連付けを解除しましたが、明らかにそうではありませんでした。 誰かが間違っていることを私に指摘できますか?私は実際のコードと、必要に応じて私のプロダクションサーバの詳細を投稿することができます。

<?php 
shell_exec('php -r "sleep(20);" >> /dev/null 2>&1 &'); 

xyz.php呼ば

PHPファイル、コマンドラインの下

php xyz.php 

を実行し、ブラウザからそれを呼び出す場合、それは同じ動作です:これは おかげ

+0

ここで '-q'を使用する理由は何ですか? – JustOnUnderMillions

+0

私は 'php longThing.php >> /path/to/log/log.log 2>&1&'を実行してバックグラウンドにジョブをプッシュし、すべてをログファイルに記録します – JustOnUnderMillions

+0

それを呼び出したApacheプロセスからWebスクリプトを削除します。その目的は、cliスクリプトをデーモン化して、apache(a)が子プロセスとしてそれを生成しないようにし、(b)cliスクリプトがapacheの再起動後も存続するようにすることです。 – Grindlay

答えて

関連する問題