Запуск только одной копии скрипта: PHP, CRON

Запуск только одной копии скрипта: PHP, CRON


Бывает необходимо запускать тяжелые скрипты в кроне ежеминутно и следить что был запущен только один процесс скрипта. В этом нам поможем класс FileLock.

/**
* Class FileLock
*/
class FileLock {
/** Проверяем блокировку скрипта
* @param $filename
* @return bool
*/
static function check($filename){
if(!$filename)
return false;

$filename .= '.lock';

if(file_exists($filename) && ((time() - filemtime ($filename)) < 3600)){
if(strstr (file_get_contents($filename),'LOCKED')){
return true;
}else{
return false;
}
}else{
return false;
}
}

/** Устанавливаем блокировку
* @param $filename
* @return bool|int
*/
static function setPoint($filename){
if(!$filename)
return false;

$filename .= '.lock';

return file_put_contents($filename, 'LOCKED');
}

/** Удаляем блокировку
* @param $filename
* @return bool|int
*/
static function del($filename){
if(!$filename)
return false;

$filename .= '.lock';

return file_put_contents($filename, '');
}
}


Пример использования.

Проверяем запущен ли скрипт.
if(FileLock::check(__FILE__)){
exit("скрипт __FILE__ занят другим процессом"); }

Устанавливаем метку "блокировка скрипта"
FileLock::setPoint(__FILE__);

По завершению работы скрипта снимаем блокировки со скрипта
FileLock::del(__FILE__);
Поделиться ссылкой:
ВКонтакт Facebook Одноклассники Twitter Mail.Ru

Также читают

mysqldump, бекап, database, db, бд, explain
JS установить и получить Cookie
KISS - делайте вещи проще

Возврат к списку