Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

12K
28 декабря 2006 года
elbeet
15 / / 13.02.2006
Есть php скрипт, который запускается из браузера различными юзерами и может выполняться минут 20. Если запустить этот скрипт дважды (2 процесса одновременно), то результат получается печальный. Как контролировать, работает скрипт или нет? Как запретить запуск скрипта, если он уже работает?
12K
28 декабря 2006 года
elbeet
15 / / 13.02.2006
На скорую руку написал в начале скрипта создание временного файла и запись туда еденицы (т.е. скрипт работает) (соответственно завершение скрипта, если файл уже есть и в нём стоит 1), а в конце скрипта удаление временного файла. Пока всё хорошо, но если скрипт будет прерван посередине, то временный файл будет жить вечно, т.ч. этот вариант плох
4
28 декабря 2006 года
mike
3.7K / / 01.10.2002
Вариантов несколько.

1. Использовать грамотные блокировки файлов - flock()
2. Использовать блокировки базы данных. (в MySql есть специальные функцие, точне не помню как называются, но что-то вроде SET_LOCK() и GET_LOCK())
3. Создавать временный каталог. Удобно тем, что функция mkdir возвращает ошибку, если каталог уже существует:

 
Код:
if (!mkdir("runfile",0755)) {print "процесс уже зарущен";exit;}
12K
28 декабря 2006 года
elbeet
15 / / 13.02.2006
А что делать, если скрипт отвалился и блокировки не были сняты, временные файлы/каталоги не были удалены?
285
29 декабря 2006 года
Romik
479 / / 24.11.2002
используй таймаут по времени последнего изменения файла [getlastmod()], т е если предположительный максимум работы скрипт минут 20, т е при наличии блокировки более получаса назад, игнорировать её, ну или используй некий ключ/опцию для игнорирования блокировки. ещё можешь попробывать заюзать события перехвата ошибок и там очищать свой временый файл

Почитал ман по flock: The lock is released also by fclose() (which is also called automatically when script finished)
получается предложение mike'а насчёт flock - оптимально
20K
30 декабря 2006 года
Silence
15 / / 02.11.2006
Safe Mode?...:rolleyes:
22K
30 декабря 2006 года
l0bSter
8 / / 11.12.2006
А что за скрипт собственно такой, который 20 минут работает
Опиши поподробнее

Возможно нужно модифицировать алгоритмы скрипта
12K
19 января 2007 года
elbeet
15 / / 13.02.2006
Цитата: l0bSter
А что за скрипт собственно такой, который 20 минут работает
Опиши поподробнее

Возможно нужно модифицировать алгоритмы скрипта



Скрипт просматривает определённые таблицы в определённых БД. Из нужных таблиц создаётся бинарный дамп (быстрее обычного дампа), архивируется, качается по ftp (реализовано CURL-ом) на другой сервер, там распаковывается и закачивается в БД.

Репликация MySQL-я не подходит.
Использование логов, создаваемых для репликации - оказалось не надёжно

253
20 января 2007 года
Proger_XP
1.5K / / 07.08.2004
Это если тебе пхп даст держать скрипт запущенным 20 минут.... :) По умолчанию = 30 сек, см. max_execution_time. Или мб разбить 1 скрипт на 3?
338
21 января 2007 года
chigevara
529 / / 29.09.2003
как костыль для корректного удаления временных файлов - ignore_user_abort;
как решение - думать над реализацией...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог