はPHP

2016-03-24 1 views
0

シナリオからバックグラウンドでシェルスクリプトを実行:はPHP

  1. は、私は、要求が終了した後も実行を継続する必要があるシェルスクリプトを生成します(ウェブ経由でアクセス)PHPスクリプトを持っています。
  2. 私は私がしようとあらゆるアプローチはまだフィニッシュにシェルスクリプトを待っているPHPをもたらすと思わディスク上のファイル(すなわち「./script.sh> run.log」)に送られた出力

が必要実行中。

  1. nohup ./script.sh > run.log &
  2. nohup ./script.sh > run.log 2>&1
  3. nohup ./script.sh > run.log 2>&1 &
  4. ./script.sh &
  5. ./script.sh > run.log 2>&1
  6. ./script.sh > run.log &

を私はそこだと思う。私が試したアプローチ本当に明白な何かが欠けているかもしれません。何か案は?

+0

シェルスクリプトは、Webサーバーと同じユーザーとして実行する必要がありますか?シェルスクリプトを起動するために何らかのデーモンを実行し、PHPスクリプトでデーモンにトリガーを送信させるのはどうでしょうか?また、あなたのPHPスクリプトは本当に*シェルスクリプトを生成する必要がありますか?それは私には非常に危険なようです。 – ghoti

答えて

1

あなたの数5のアプローチは近いですが、あなたがこの

のように/ dev/nullにこの

shell_exec("/script.sh > run.log 2>&1 &"); 

のように6とそれを組み合わせたり、リダイレクトする必要があります

shell_exec("/script.sh > /dev/null 2>/dev/null &") 

PHP開発サーバーはコマンドを適切にフォークできないようです。 ApacheやNGinxなどの実際のWebサーバーを使用すると問題が解決されます。

+0

私はその変更を行い、シェルスクリプトが実行を終了するまでPHPはまだブロックしています。 PHPの組み込みWebサーバーを使用していると思いますか? nginx/php-fpmへの切り替えはそれを修正するだろうか? – Zach

+0

nginx/php-fpmをインストールしたところ、問題は解決しました。 ** PHP開発サーバーはコマンドを正しくフォークできません** – Zach

2

私は、スクリプトでscreenインスタンスを起動することによって、これを達成できると思う:

screen -d -m 'bash ./script.sh > run.log'