Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запретить паралельный запуск одного и того же скрипта
Форумы портала PHP.SU » » Если скрипт не работает » Запретить паралельный запуск одного и того же скрипта

Страниц (1): [1]
 

1. incker - 13 Июля, 2015 - 01:23:05 - перейти к сообщению
Здравствуйте,
Мне нужно чтоб один и тот же скрипт (например admin/index.php) нельзя было запустить на паралельное выполнение, только на последовательное..

думал записывать в бд 1 или 0 если скрипт уже выполняется, чтоб не смог запуститься еще раз.. но мне кажется это не идеальное решение... с небольшой, но вероятностью может случиться паралельный запуск одного скрипта

Кто сталкивался, большое спасибо!
2. DeepVarvar - 13 Июля, 2015 - 02:36:23 - перейти к сообщению
Ну если совсем в лоб решать, то можно сгрепать в процессах свой собственный путь, если там кроме тебя уже есть кто-то такой как ты, то не работать.
3. Sail - 13 Июля, 2015 - 09:52:36 - перейти к сообщению
incker, обратите внимание на "семафоры"
4. Мелкий - 13 Июля, 2015 - 10:44:02 - перейти к сообщению
incker пишет:
с небольшой, но вероятностью может случиться паралельный запуск одного скрипта

Нет, не может. Если, конечно, корректно управляетесь с блокировками.
Примерно такой алгоритм:
begin;
select /**/ where is_task_active=0 limit 1 for update;
if (row not exists) {
commit;
exit;
} else {
update is_task_active=1
commit;
// work here
}

Вот упасть по какой-нибудь причине и больше не запуститься без вмешательства человека при таком сценарии возможно. Нужен кто-то, кто будет сбрасывать метку активности. Но два инстанса запустить не выйдет.
5. DelphinPRO - 13 Июля, 2015 - 14:24:46 - перейти к сообщению
Мелкий пишет:
Нужен кто-то, кто будет сбрасывать метку активности. Но два инстанса запустить не выйдет.

я пишу время начала выполнения (а не булеву метку), в конце его обнуляю
и проверяю, если время пусто - запускаемся, если время записано и прошло N сек, значит предыдущий инстанс упал, можно запускаться.
6. Мелкий - 13 Июля, 2015 - 14:33:26 - перейти к сообщению
DelphinPRO, да, вариант.

 

Powered by ExBB FM 1.0 RC1