Как проверить экземпляр задания php - PullRequest
3 голосов
/ 26 января 2011

В моей системе я запланировал выполнение задания PHP каждую минуту.

Теперь я хочу, чтобы, если запущен 1 экземпляр этого задания и это заняло более 1 минуты, запускался новый экземплярпосле каждой минуты проверяет, работает ли какой-либо предыдущий экземпляр и работает ли какой-либо предыдущий, новый убивает себя ... Я пробовал команды system (), но не могу понять.

Любые предложения

Ответы [ 2 ]

8 голосов
/ 26 января 2011

Использовать эксклюзивную блокировку файла для файла блокировки.Как только процесс завершает свое выполнение, блокировка автоматически снимается.

<?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

1 голос
/ 26 января 2011

Есть несколько решений. Общим для всех является установка флага при запуске задания, очистка флага по завершении задания. И проверка на наличие этого флага при запуске задания.

В псевдокоде:

if ( flag is set )
  exit

set flag

do some stuff

clear flag

Например, вы можете создать файл в качестве вашего флага. Или вы можете создать ключ в memcache и использовать его в качестве флага. Или база данных, или что-то еще.

...