みなさん、こんにちは。ワンクリック起動機能を実装するシェルスクリプトができました。これを Web バージョンにしたいと考えています
しかし、このスクリプトの実行には約 2 ~ 3 分と長い時間がかかり、その間にいくつかの成功プロンプトが画面にエコー表示されます
しかし、今は php を使用してこのスクリプトを調整しています。 exec と system を実行すると、ステートメントが Web ページに印刷される前に、スクリプトが完全に実行されるまで待つ必要があることがわかりました
さて、私の質問は、シェルはステートメントを印刷してから、代わりに Web ページにステートメントを表示できるかということです。シェルが完全に実行されるのを待っていますか? 完成したら一緒に紹介します
皆さんありがとうございます!
echo ステートメントはシェル内にあります。これを行うことができます
シェルを呼び出すときに、出力リダイレクトを追加し、それをファイルに追加できます。このシェルを呼び出すには、以下が必要です。バックグラウンドで実行されます。
次に、php を使用して tail コマンドを呼び出し、出力ファイルを読み取り、毎秒表示します。バッファを 0 に設定する必要があります。そうしないと、表示されるまで 4096 待機します。
例:
exec("/home/web/a.sh >> /home/web/a.log 2>&1 &");
$log = file_get_contents('/home/web/a. log ');
ここでは、各行を配列に記録し、毎回新しい行のみをエコーすることができます。
exec も system も関数です
関数なので、呼び出されると必ず戻りを待ちます
呼び出された関数にコールバック関数がない限り
exec も system もコールバック関数インターフェイスを提供していないため、完了するのを待つだけです
echo ステートメントはシェル内にありますよね? 次のようになります
シェルを呼び出すとき、出力リダイレクトを追加してファイルに追加できます。このシェルを呼び出すには次のようにする必要があります。バックグラウンドで実行されます。
次に、php を使用して tail コマンドを呼び出し、出力ファイルを読み取り、毎秒表示します。バッファを 0 に設定する必要があります。そうしないと、表示されるまで 4096 待機します。
例:
exec("/home/web/a.sh >> /home/web/a.log 2>&1 &");
$log = file_get_contents('/home/web/a. log ');
ここでは、各行を配列に記録し、毎回新しい行のみをエコーすることができます。
execもsystemも関数です
関数なので呼び出されると必ず戻りを待ちます
呼び出された関数にコールバック関数がない限り
execもsystemも無いのでコールバック関数インターフェイスを提供します。あとは彼が完了するのを待つだけです
遅くなりましたが、上の 2 人のおかげで問題は解決しました
1 階の方法と同様です
スクリプトはバックグラウンドで実行する必要があります。出力はファイルにリダイレクトされます
php は 1 秒ごとにファイルに新しく追加されたコンテンツを定期的に読み取ります。ここで、ファイルのオフセットを記録し、fseek を使用してそれを見つけます。スクリプト、途中から飛び出して終わります