Запуск одной копии скрипта

Тема в разделе "Как сделать...", создана пользователем nestbg, 17 янв 2008.

Статус темы:
Закрыта.
  1. nestbg

    nestbg Читатель

    Регистр.:
    29 мар 2007
    Сообщения:
    62
    Симпатии:
    6
    Как сделать так, чтобы в каждый конкретный момент была запущена одна копия скрипта, т.е. защиту от многократного запуска ?

    Имеется вариант в тушке скрипта обновлять в каком-нибудь файлике дату (или дату самого файлика), а при начале работы скрипта сравнивать её с текущей. Если разошлись секунд на 10, то делаем вывод "скрипт не запущен, работаем дальше", иначе "скрипт запущен, нам делать нечего, вываливаемся". Соответственно сам скрипт дёргать кроном раз в 2 секунды.

    Но это топорное решение. Есть какие-то другие способы ? :nezn:
     
  2. rootkit

    rootkit Постоялец

    Регистр.:
    4 апр 2007
    Сообщения:
    143
    Симпатии:
    27
    :) вообще конечно тупое решение, но это так, навскидку - скрипт открывает какой-то файл и держит его. Если кто-то пытается запустить наш скрипт, он проверяет, не заблокирован ли этот файлик - если да, прекращаем работу ( die(); )
     
  3. nestbg

    nestbg Читатель

    Регистр.:
    29 мар 2007
    Сообщения:
    62
    Симпатии:
    6
    В принципе нормальное решение. Но будет ли оно работать под фряхой, линуксом ? Под виндой можно открыть монопольный доступ, а вот с фряхой пока не сталкивался...
     
  4. arp

    arp

    Регистр.:
    10 авг 2006
    Сообщения:
    325
    Симпатии:
    177
    я делал просто - создавал файл "yes", а потом в скрипте проверял - если файл существует - die. если нет - создать и начать работать. в конце работы - удалить файл :)
    и кроном ты можешь дергать скрипт только раз в минуту :)
     
  5. rootkit

    rootkit Постоялец

    Регистр.:
    4 апр 2007
    Сообщения:
    143
    Симпатии:
    27
    вот и будет причина познакомится с ней по-ближе :) эксперимент ведь провести не так трудно...
     
  6. nestbg

    nestbg Читатель

    Регистр.:
    29 мар 2007
    Сообщения:
    62
    Симпатии:
    6
    Всё хорошо, только если скрипт склеит ласты или вылетит по таймауту, то файл останется. В следующий раз скрипт уже не запустится.

    Можно скомбинировать с записью в него даты :D
     
  7. arp

    arp

    Регистр.:
    10 авг 2006
    Сообщения:
    325
    Симпатии:
    177
    на этот счет у меня дальше была проверка даты. точнее разницы только в минутах (параметр i для date), т.к. скрипт запускается каждую минуту - можно проверять - если разница, к примеру, больше 5, то удалять файл :)
     
  8. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    А если копать в сторону запущенных процессов и выполняемых комманд? :)

     
  9. nestbg

    nestbg Читатель

    Регистр.:
    29 мар 2007
    Сообщения:
    62
    Симпатии:
    6
    Работать может и будет, но так делать нельзя. Т.к. придётся запускать из пхп внешнюю команду, забирать результат. А это имхо более ресурсоёмко, чем пхпшные touch+filemtime(не забывая про clearstatcache).
    В принципе уже реализовал.
     
  10. studentpm

    studentpm

    Регистр.:
    8 ноя 2006
    Сообщения:
    184
    Симпатии:
    132
    Тайм-аут в кроне?
    А что-бы ласты не слеивал нужно писать стабильниые скрипты.
    просто создавать и удалять файл - оптимальный вариант.
     
Статус темы:
Закрыта.