class Cron_Lock

Простейший механизм локов для блокировки одновременного запуска нескольких задач планировщиком. При запуске создает файл блокировки, который не позволяет запуститься еще одному процессу. Блокировка считается валидной до истечения срока (время последнего обновления + время отведенное на ожидание до перехвата).

class Cron_Lock
{
/** 
 * Конфигурация по умолчанию
 * time_limit - ограничение на время выполнения
 * intercept_limit - ожидание до перехвата, после обновления
 * locks_dir - путь к папке с файлами блокировки
 * @var array
 */
protected $config 

/**
 * Время запуска
 * @var integer
 */
protected $startTime = 0;

/**
 * Название приложения
 * @var unknown
 */
protected $task= 'task';

/**
 * Путь к файлу блокировки
 * @var string
 */
protected $lockFile = false;

/**
 * Адаптер логирования
 * @var Log
 */
protected $logsAdapter = false;

/**
 * Конструктор, принимает настройки в виде массива имя => значение
 * time_limit - ограничение на время выполнения (секунд);
 * intercept_limit - ожидание до перехвата, после обновления (секунд);
 * locks_dir - путь к папке с файлами блокировки;
 * @param array $config (time_limit,intercept_limit,locks_dir)
 */
public function __construct(array $config = array())

/**
 * Установить лимит времени на выполнение
 * @param integer $limit
 */
public function setTimeLimit($limit)

/**
 * Указать папку для хранения файлов блокировок
 * @param string $path
 * @throws Exception
 */
public function setLocksDir($path)

/**
 * Установить время ожидания до перехвата лока (секунд),
 * интервал ожидания после обновления лок-файла, до принятия решения о том, что можно перехватить.
 * @param integer $limit
 */
public function setInterceptTimeout($limit)

/**
 * Установить адаптер логов
 * @param Log $log
 */
public function setLogsAdapter(Log $log)

/**
 * Запустить задачу.
 * Возвращает true, если лок успешно выставлен и можно начинать обработку;
 * Возвращает false, если уже есть лок-файл и его время еще актуально (уже запущен процесс);
 * @param string $taskName - имя задачи (используется для создания лок файла);
 * @return boolean
 */
public function launch($taskName)

/**
 * Проверить наличие блоки
 * @return boolean
 */
public function isLocked()

/**
 * Создать лок для текущей задачи
 * @return boolean
 */
public function setLock()

/**
 * Обновить данные лока
 * @return boolean
 */
public function sync()

/**
 * Удалить файл блокировки
 * @return boolean
 */
public function releaseLock()

/**
 * Отправить сообщение в лог
 * @param string $message
 */
public function log($message)

/**
 * Получить лимит на время выполнения задачи
 * @return integer
 */
public function getTimeLimit()

/**
 * Получить время запуска задачи
 * @return integer
 */
public function getStartTime()

/**
 * Узнать, достигнут ли лимит на время выполнения
 * @return boolean
 */
public function isTimeLimitReached()

/**
 * Проверить лимит на время выполнения, завершить приложение в случае достижения
 */
public function checkTimeLimit()

/**
 * Завершение работы задачи
 */
public function finish()
}

comments powered by Disqus