Как запретить запуск скрпита повторно, если он работает?

асс

Мой дом здесь!
Регистрация
13 Окт 2006
Сообщения
762
Реакции
230
Добрый день, есть ситуация.
Работает сркипт запущенный по крон назовем его

a.php

Так вот мне надо как то сделать, чтобы крон сработал в холостую если скрипт a.php еще выполняется.

тоесть надо типа
PHP:
if(count($output)>1) {
        echo 'скрипт  еще  работает';
        echo date('h:i:s') . "\n";
        print_r($output);

}
else {
        echo 'скрипт уже отработал  запускаем повторно;
        echo date('h:i:s') . "\n";
        print_r($output);
}


ниже код скрипта
 
есть такая хорошея штука как мьютекс
в пхп их поддержка отсутствует ( хотя я могу ошибаться )
но их работу можно эмулировать файлами или БД



можно еще на семафорах, но походу работа с ними на фиговых хостингах запрещена

------

короче если через эмулированный мюнтекс то общий смысл такой:

1) перед началом выполнения скрипт проверяет наличие какого-то файла ( или установленного поля в БД)
2) если он есть то скрипт либо отваливается ( запустится на след. запуске крона ) либо слипается
3) если его нету, то скрипт создает файл ( или ставит признак в БД ) и начинает работать
4) после окончания работы скрипт удаляет файл (или затирает признак в БД )

если итерация на кроне подобрана более менее оптимально, т.к. не будет случая когда более 100 запущенных процессов уйдет в слип - то должно работать как часики
 
есть
если итерация на кроне подобрана более менее оптимально, т.к. не будет случая когда более 100 запущенных процессов уйдет в слип - то должно работать как часики



Скрипт из базы берет домен, проверяет его и удаляет, если он не соответствует нужным параметрам.
И так до конца.

В принципе работает быстро проверка но меня беспокоит ка
решить вопрос с дублями процессов.

может еще как вариант set_time_limit(18000); 30 минут.
через 35 минукт дергать файл снова.
Тольк боюсь завершит ли таким спосбом работу скрипт.


А можно ли получить PID запущенного файла?
к примеру файл sex.php запускаем кроном или по http
в базу заносим его PID затем при новом запуске
проверяем этот пид в процессах, и если он есть то не запускаем 2 скрипт.
 
Скрипт из базы берет домен, проверяет его и удаляет, если он не соответствует нужным параметрам.
И так до конца.

В принципе работает быстро проверка но меня беспокоит ка
решить вопрос с дублями процессов.

может еще как вариант set_time_limit(18000); 30 минут.
через 35 минукт дергать файл снова.
Тольк боюсь завершит ли таким спосбом работу скрипт.


А можно ли получить PID запущенного файла?
к примеру файл sex.php запускаем кроном или по http
в базу заносим его PID затем при новом запуске
проверяем этот пид в процессах, и если он есть то не запускаем 2 скрипт.


int getmypid (void)
Возвращает идентификатор ID текущего процесса РНР или FALSE при ошибке.

Проверить запущенный процесс по его идентификатору можно системной командой "ps №процесса".
 
Самый простой вариант создавать пустой файл с определенным именем в начале работы скрипта и удалять его при окончании, соответственно в начале скрипта вставляем проверку на существование данного файла, если он есть уходим, если нет то вперед :)
 
Самый простой вариант создавать пустой файл с определенным именем в начале работы скрипта и удалять его при окончании, соответственно в начале скрипта вставляем проверку на существование данного файла, если он есть уходим, если нет то вперед :)


Про этот вариант уже мне говорили.
Но вдруг процесс сломается или еще чего а файл не удалится.
Тогда крон всегда будет давать
пустой ход.



echo '<br />getmypid: ' .getmypid(); Вот так отдает PID
правда еще не совсем разобрался
но покопаю пока сюда
 
Если у тебя крон запускает несколько процессов, как ты узнаешь что нужный процесс отработал и при этом не создался новый с таким идентификатором?
 
Если у тебя крон запускает несколько процессов, как ты узнаешь что нужный процесс отработал и при этом не создался новый с таким идентификатором?


Pid Созданный файлом записать в базу
или в файлик, в конце как вы уже сказали стирать его.
 
Про этот вариант уже мне говорили.
Но вдруг процесс сломается или еще чего а файл не удалится.
Тогда крон всегда будет давать
пустой ход.


проверять время последнего изменения файла: если больше определенного, то удаляем его.
 
Назад
Сверху