1

私は2台のコンピューターを持っています。最初のコンピューターでは、すべてのWebコードでapacheを実行しています。2台目のコンピューターには、取得スクリプトを使用して大量のデータが保存されています(スクリプトの実行には通常数時間かかります)。私は基本的に、時間の遅れなしにこのデータにアクセスするためのWebUIを作成しています。

だから私は呼ぶ:

exec("bash initial.bash");

これは私のApacheフォルダーにあるドライバースクリプトです。他のコンピューターのスクリプトを呼び出します。呼び出し: ssh otherMachine temp.bash&

このスクリプトは、2台目のコンピューターでデータ取得スクリプトを呼び出します。

ターミナルでinitial.bashを呼び出すと、すべてがスムーズに正常に機能しますが、PHPファイルで呼び出すと、.を除いて、initial.bash内のすべてのコマンドが実行されますssh otherMachine temp.bash&。その最後に&を付けて、temp.bashがバックグラウンドで実行されるようにします。これは、完了するまでに数時間かかるためです。

Apacheによって呼び出されたときにネストされたスクリプトが実行されない理由がわかりません。execまたはshell_execを使用してスクリプトを呼び出し、最終的に別のスクリプトを呼び出すよりも優れた代替手段はありますか。2台目のマシンでスクリプトを直接呼び出さないのは、プログラムの実行に時間がかかるためです。Shell_execは、スクリプトが完了するまでphpページをレンダリングしません。

4

3 に答える 3

3

いくつかの提案:

  1. ssh へのフル パスを入力してみてください (/usr/bin/sshまたは、単にではなく、インストールされている場所ssh)

  2. Apache/PHP を実行しているユーザーが、パスワードを要求せずに他のマシンに ssh できるように正しく設定されていることを確認してください。明らかに、SSH がパスワードを要求した場合、パスワードを入力する人がそこにいないため、何もしていないように見えます。

  3. 出力もリダイレクトしてみてください -ssh othermachine temp.bash >/dev/null 2>&1 &

  4. ssh にいくつかの異なるフラグを試してください。これ-nは、バックグラウンドで ssh を介してコマンドを実行するために特別に設計されたものです。

于 2010-03-29T18:47:48.867 に答える
1

私の推測では、SSHはユーザーphpが実行されているのを嫌っていますか?あなたはそれがターミナルからうまくいくと言います-あなたは同じphpユーザーとしてログインしていますか?

また、ある種のメッセージキューがより良い解決策であることがわかるかもしれません。

于 2010-03-29T18:36:14.410 に答える
0

cron (スケジュールされた) ジョブを使用できます。Cron ジョブは、bash スクリプトを使用して定期的にデータを取得します。

さらに exec("/bin/bash /path/to/script.sh"); を試してください。おそらくphpはbashのパスを見つけられません。追加情報については、Apache ログを参照する必要があります。

于 2010-03-29T18:37:38.403 に答える