2011-01-26 16 views
3

私のシステムでは、毎分実行するPHPジョブをスケジュールしました。PHPジョブインスタンスの確認方法

このジョブのインスタンスが1つ実行されていて、1分以上かかる場合、毎分後に起動する新しいインスタンスは、以前のインスタンスが動作していて以前のインスタンスが実行されているかどうかをチェックします。それ自身を殺す...私はsystem()コマンドを試していたが、それを理解できなかった。

任意の妊娠

答えて

8

ロックファイルに排他的なファイルロックを使用します。プロセスが実行を終了すると、ロックは自動的に解放されます。

<?php  
$fp = fopen("/var/tmp/your.lock", "w"); 
if (!flock($fp, LOCK_EX|LOCK_NB)) { // try to get exclusive lock, non-blocking 
    die("Another instance is running"); 
} 

[... continue with the script ...] 

参照:http://www.php.net/manual/en/function.flock.php

+0

2番目のインスタンスは、あまりにも多くの時間を待って.... – Harikrishnan

1

いくつかの解決策があります。すべての人に共通することは、ジョブの開始時にフラグを設定し、ジョブが完了したらフラグをクリアすることです。ジョブが開始されたときにそのフラグの存在をチェックします。擬似コードで

:あなたは、インスタンスのためのあなたのフラグとしてファイルを作成することができます

if (flag is set) 
    exit 

set flag 

do some stuff 

clear flag 

。あるいは、memcacheにキーを作成し、これをフラグとして使用することもできます。データベース、または他の何か。