4

exec()関数を使用してバックグラウンドで実行するPHPスクリプトをトリガーしようとしていますが、動作させることができません。私はスタックオーバーフローや他のフォーラムで数え切れないほどの投稿を読み、無駄に多くのバリエーションを試しました。

サーバー情報:

Operating System: Linux
PHP: 5.2.17 
Apache Version: 2.2.23
Home Directory: /home1/username

私は現在コードを使用しています:

exec("/home1/username/php /home1/username/public_html/myscript.php > /dev/null &");

上記のスクリプトを実行すると、cPanelエラーログにerror_logもエラーも表示されませんが、スクリプトは確実に実行されません。http://www.mydomain.com/myscript.phpにアクセスすると、実行され、すぐに電子メールが送信されます。なぜこれが機能しないのか/どのようなエラーが発生しているのかを知る方法はありますか?

cPanelProcessManagerの出力を更新する

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &");

生産:

27183   php /home1/username/php /home1/username/public_html/myscript.php
27221   [sh]
27207   php /home1/username/php /home1/username/public_html/myscript.php
27219   php /home1/username/php /home1/username/public_html/myscript.php
27222   php /home1/username/php /home1/username/public_html/myscript.php
27224   php /home1/username/php /home1/username/public_html/myscript.php
27249   sh -c php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &

それは正常ですか?スクリプトは非常に高速に実行されるはずですが、長い間ぶらぶらしているように見えます。

4

3 に答える 3

4

exec を php で動作させることができませんでした。サーバーへのシェルアクセスを取得した場合でも、コマンドがハングしました。同じことを達成する代わりに wget を使用することにしました。よく働く :)

exec("wget http://www.mydomain.com/myscript.php > /dev/null &");
于 2012-09-23T16:55:23.570 に答える
1

php CLI を直接呼び出してみましたか?

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null &");

Apache 経由で呼び出された場合にブラウザに出力される #! は必要ありません。

編集。スクリプトは機能しているように見えますが、バックグラウンドで実行されている PHP スクリプトがハングしています (終了していません)。このバリエーションを試してください:

exec("php /home1/username/php /home1/username/public_html/myscript.php > /dev/null 2>&1 &");

「> /dev/null 2>&1」はどういう意味ですか?

于 2012-09-23T04:08:23.627 に答える
0

コマンドラインからを実行したいので、myscriptこれを行わないでください。

exec('(/home1/username/public_html/myscript.php) > /dev/null &',$r,$s);

そして、これをmyscript.phpの最初の行として記述します。

#!/home1/username/php -n
<?php
    //script goes here
?>

それはうまくいくはずです。execハッシュバンは、後続のスクリプトを実行するために使用するプログラムをシステムに指示するため、それを呼び出しに追加する必要はありません。また、発生する可能性のある問題を回避するために、PHPがどの出力をどのストリームにリダイレクトする必要があるかを認識できるように、完全なスクリプト呼び出しを角かっこで囲む方が安全です(したがって、より適切です)。特に、ライブラリまたはPHP-GTKなどのパッケージがサーバーにインストールされている場合(したがって、-nオプション)。

于 2012-09-23T03:04:40.230 に答える