0

一部のコンテンツをエコーし​​てクライアントへの接続を閉じるスクリプトがありますが、一部の電子メールを処理するためにバックグラウンドで動作します。

バックグラウンドプロセスのステータスを追跡する方法はありますか? つまり、完了した、またはまだ実行中などです。

現在、プロセスの開始とプロセスの終了時にDBにフラグを設定しています。ただし、状況によってはスクリプトが失敗する場合があるのではないかと心配しています。

元。サーバー ホストからの強制終了。

また、スクリプトが実行を停止したときに関数をトリガーする方法はありますか(終了、強制停止など)

Windows/Linux サーバーでスクリプトを実行していますが、どちらも共有ホストであり、CRON、タスク スケジューラのサポートがありません。

ありがとうございました。

4

4 に答える 4

1

Windows 部分はテストしていないので、少しバグがあるかもしれません。でもコンセプトは似ていると思います。

$name = 'YOUR_SCRIPT';
if (!isRunning($name)) {
    // script is not running
    doSomething();
}

function isRunning($scriptname)
{
    $output = array();

    if (strtoupper(substr(php_uname(), 0, 3)) === 'WIN') {
        // Windows os
        exec("tasklist | find \"{$scriptname}\"", $output);
    } else {
        // Not window os, maybe linux, freebsd..etc
        exec("ps aux | grep -i $scriptname | grep -v grep", $output);
    }

    return !empty($output);
}
于 2013-06-08T08:34:41.627 に答える
0

ここでスティックの正しい端を持っているかどうかは完全にはわかりませんが、実際にはバックグラウンドプロセスに接続せずにバックグラウンドプロセスのアクティビティを記録したいと思っていると思います.

その場合、おそらくこれを行う最も簡単な方法は、プロセスで txt ログファイルを作成し、何が起こっているかを確認する必要があるときにいつでもアクセスできるようにすることです。必要に応じて、単に fwrite() を使用してファイルを追加します。

同じ目的で、読みやすいという利点がある mysql データベース テーブルを使用することもできます。

何も (または特定のことが) 発生していない場合に積極的に警告する必要がある場合は、ヘッダー ファイルまたは接続関数を使用して、ユーザーがページを読み込むたびに確認することができます。十分な数のヒットがある場合は、電子メール pdq が届きます。

cronを持っていないことは確かですか?cpanel を確認してください - そこに隠れている可能性があります。

于 2013-06-08T05:59:53.083 に答える
0

上記の答えは正しいです。その後、プロセスを停止したい場合は、プロセスを強制終了できます。

kill -9 PID

出力配列内の PID を取得します。それを if ステートメント内で使用します。

$output = array();
exec("ps aux | grep -i YOUR_SCRIPT | grep -v grep", $output);
 if (empty($output)) {
   $kill = " kill -9 ".$output['PID'] // Print the output array to get exact index for PID
    exec($kill); 
  }
于 2013-06-08T07:08:17.230 に答える