[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрет на повторное выполнение
Invis1ble
Привет всем. Возник вопрос.
К примеру у нас имеется какой-то скрипт... Возможно ли каким-то образом (на уровне кодинга) реализовать запрет на его выполнение, если в данный момент времени на сервере уже выполяется этот-же скрипт? Тоесть нужно сделать так, чтобы одновременно мог работать только один скрипт с этим именем.



Спустя 4 минуты, 29 секунд (29.01.2011 - 15:28) Snus написал(а):
Invis1ble
Если в общеглобальном смысле рассматривать. То есть - если скрипт выполняется долго и нужно ограничить выполнение одновременно несколькими юзверями, то лучше создать таблицу в БД или еще лучше файло и туда в начале выполнения скрипта писать значение 1 и после выполнения - 0. Перед выполнением скрипта проверять значение на 0. Но тут уже тогда нужно кроном фиксить в случае, если скрипт выполнился не до конца.

Спустя 11 минут, 4 секунды (29.01.2011 - 15:39) Invis1ble написал(а):
Snus
Цитата
То есть - если скрипт выполняется долго

Именно! Только юзер будет один - админ ) Нужна защита от дурака, чтоб он случайно два и более раз не запустил скрипт, т.к. он очень много ресурсов жрет и может работать скажем час-два.
Цитата
создать таблицу в БД или еще лучше файло и туда в начале выполнения скрипта писать значение 1 и после выполнения - 0. Перед выполнением скрипта проверять значение на 0. Но тут уже тогда нужно кроном фиксить в случае, если скрипт выполнился не до конца

Интересная мысль.... че-то я до этого не допер =) только замарачиваться с БД думаю не хорошо, а вот какой-нибудь файл создать можно... а потом убить его )

Все же у меня есть ощущение, что это можно сделать как-то более красиво и так сказать гуманней... Может в .htacсess есть какие-то волшебные директивы?

Спустя 1 минута, 41 секунда (29.01.2011 - 15:40) Snus написал(а):
Invis1ble
.htacсess будет использовать правило для всех скриптов и ты в конечном итоге наткнешься на грабли.

Спустя 5 минут, 19 секунд (29.01.2011 - 15:46) Invis1ble написал(а):
Snus
Ок, твоя мысль ясна )

Интересуют еще мнения общественности.

Спустя 27 минут, 6 секунд (29.01.2011 - 16:13) Arni написал(а):
Цитата (Invis1ble @ 29.01.2011 - 12:46)
Snus
Ок, твоя мысль ясна )

Интересуют еще мнения общественности.

В любом случае вам нужно сделать связующее звено. Иначе никак по всем законам логики. Вариантов несколько, можно связать через базу данных. Если поле в таблице равно 1, значит делаем exit(); Если нет, лочим через UPDATE lock = 1, и выполняем. Накладки в любом случае произойти не должно, потому что сервер базы данных блокирует таблицы на момент выполнения UPDATE. Как вариант, значение блокировки можно всунуть в Memcached, для повышения производительности.

Спустя 56 минут, 41 секунда (29.01.2011 - 17:10) inpost написал(а):
Надо устанавливать какие-нибудь точки в скрипте, которые и будут свидетельствовать о начале и конце выполнения скрипта, либо же внутри него проводить операцию с информацией о дате. И при запуске делать проверку, была ли последняя запись последние там 15 минут, к примеру.
Как пример:
В БД заносятся 1000 записей, первая запись будет называться START, последняя END. Проверять, если последняя запись была END - то можно запускать скрипт.

Спустя 1 день, 17 часов, 6 минут, 52 секунды (31.01.2011 - 10:16) linker написал(а):
Все просто, использование lock-файла. Скрипт стартует, проверяет наличие lock-файла, если существует, то завершить работу. Если не существует, то создать и продолжить работу. При завершении работы, удалить lock-файл.

Спустя 7 часов, 51 минута, 25 секунд (31.01.2011 - 18:08) Invis1ble написал(а):
linker
о, клево! я так и подумал, что решение с файлом - лучшее


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.