短い背景:
私のデータベースには電子メールのリストがあり、ユーザーはそれらの顧客の電子メールに送信する価格表を作成します。CRON ジョブを設定してこれを処理するのではなく、送信前に価格表が正しいことを確認するために、ボタンをクリックするだけでこれを実行したいと考えています。
プロセス
私は Codeigniter と、リモート ホスト上の Linux サーバーを使用しています。
- ユーザーはボタンをクリックしてプロセスを開始します。モデルで取得した PID に db 列のステータスを設定します。
- AJAX はコントローラー関数を呼び出します。これは、顧客へのメール送信が完了するまで実行されます。(今のところダミースリープ機能)。
スクリプトが終了すると (HTTP 要求が満たされると)、ajax は処理アイコンを削除します。
- スクリプトが開始された後にユーザーがページにアクセスすると、ステータスが != 0 の場合、コントローラーに PID のステータスを確認するように HTTP 要求にループします。
- 私が取得している PID は常に 5012 であり、私のスクリプトでは常に実行されているようです。
- プロセスが実行
if (shell_exec("ps aux | grep " . $pid . " | wc -l") > 0) { // PID is running }
されているかどうかを確認するために実行しています。 $pid は関数のパラメーターです。
これをすべてまとめるための最後のステップ:
- ユーザーがページにアクセスし、スクリプトが実行されている場合、スクリプトが完了したかどうか、いつ完了したかを確認する方法がありません
- 後でパフォーマンスの問題になるように思われるため、DBに対してブルートクエリを実行したくありません
- 最終的には静的アイコンをサイトに追加して、ユーザーがステータスを確認するためにここに戻る必要がないようにしたいと考えています
TLDR
codeigniter 内で PHP スクリプトを実行していますが、別のページにアクセスしたり、現在のページを更新したりするときに、スクリプトがまだ実行されているかどうかを確認して、適切なユーザー フィードバックを得る方法が必要です。