2013-08-05 21 views
5

5分ごとにPHPスクリプトを呼び出したり実行したりするCRONをスケジュールしました。 PHPスクリプトは以下のタスクを実行しますCRONによって開始されたPHPスクリプトの実行を停止または停止しますか?

  1. 前回の実行がまだ実行中であるかどうかを識別するためにデータベースのフラグ値をチェックします。 DBの値1はプロセスがまだ実行中であることを示し、0の値はプロセスが実行されていないことを示します。
  2. フラグの値が1の場合、PHPを終了し、次のステップに進みます。
  3. データベースのフラグ値を0から1に更新します。
  4. ビジネスロジックを実行します。
  5. フラグ値を1から0に戻します。これにより、ユーザーテーブルでデータを使用できる場合に次のCRONを実行できるようになります。

ユーザーのアップロードしたデータのサイズによっては、平均で35〜40分かかることがあります。

質問、一度、cronによって開始されたPHPスクリプトの実行を強制終了または停止することはありますか?ユーザーが実行を停止し、新しいデータをアップロードし、CRONが実行されるのを待つボタンにすることができます。私はすべてのフラグとデータをリセットすることができますそれはPHPスクリプトを殺すだけで私が把握しようとしているものです。

は、私はいくつかのグーグルを行なったし、私のようないくつかのコマンドを使用することができます考え出し:サーバー上で実行されているすべてのPHPのプロセスを殺すために

Killall -9 PHP 

が、PHPを介してこれを行う方法がわかりません。

答えて

1

あなたはsystem()またはexec()を試すことができますが、それは(エラーを拒否または許可を返す)動作しない可能性がありますcronのプロセスは、現在のユーザーまたはルートのいずれかによって実行されると、Webサーバのユーザは、通常、これらのプロセスへのアクセスを持っていません。

4

これを試してみてください:

ps aux |grep 'part_of_the_name_of_your_script'|awk '{print $2}' |xargs kill -9 {}

またはあなたのcrontabファイル使用CRUNで、変数CRUN_TIME

は、このタスクのために非常に適切であろう crun -h

+1

キラー1つのライナー、ありがとうございました。 '{}'でエラーが発生しました。コマンドを削除したときに動作しました。 –

1

lock fileを参照してください。 PHPスクリプトは新しいファイルの作成を試みることができます。まだ作成されていない場合は、現時点で唯一のスクリプトであることを安全に知ることができます。ファイルが存在する場合は、単にスクリプトを終了することができます。

例:

<?php 

if (file_exists('/var/run/my-script')) { 
    exit(1); // already running 
} 

file_put_contents('/var/run/my-script', getmypid()); 

/** Business Logic **/ 

unlink('/var/run/my-script'); 
exit(0); 

?> 
+0

ありがとうございますが、これで問題が解決するかどうかはわかりません。あなたが提案すると、スクリプトがすでに実行されているかどうかチェックするためにロックファイルを使用しています。私は(今のところ非常に効率的ではなく動作していない)データベースフラグの助けを借りて、すでにそれを管理することができています。私は何を探していますと、スクリプトは、ビジネス・ロジックの処理を開始した後、実行を停止する方法です。 – Saurabh

関連する問題