За последние 24 часа нас посетили 16804 программиста и 1615 роботов. Сейчас ищет 1271 программист ...

Автоматизация и проверка исполнительности

Тема в разделе "Прочие вопросы по PHP", создана пользователем &_&, 10 июн 2011.

  1. &_&

    &_& Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Есть:
    скрипты, которые ограничены в своих задачах, каждый отвечает за свой кусок обработки данных, если данных от предыдущего скрипта нету, то ничто не делает.

    Задача:
    1. Заставить скрипты работать по кругу, без участия юзера, в фоне сервера
    2. Делать небольшие паузы между запуском скриптов, чтоб не перегрузить ДБ
    3. Не давать одному скрипту запускаться два раза параллельно

    Попытки решений:
    Крон, запускал через
    /usr/bin/wget -q -O /dev/null http://localhost/script.php

    Проблемы:
    1. Самый короткий отрезок времени для крона - 1 минута, хочется быстрее, так как большинство скриптов укладываются в доли секунд
    2. Есть скрипт, который работает с XML файлом более 50мб, там одно открытие файла уже занимает секунд 7-10. Ставить больше минут в кроне - замедление общей системы. Ставить минуту - может случится так, что запустятся параллельно, и будут дублировать данные, создавая ошибки.

    Мысль:
    Хотелось бы чтоб каждый скрипт в конце, завершая свою работу запускал сам себя заново, туда можно будет sleep вписать для пауз. Но из-за какой-либо ошибки скрипт может вылететь, и цепочка оборвётся. Поэтому нужен скрипт, который можно было бы запускать раз в минуту кроном, а он смотрел, запущенны ли другие скрипты из списка задач.

    Такое реально? Если да, помогите пожалуйства, скажите хотя бы в какую стоорну копать.
     
  2. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    в бд создать таблицу, где отражается состояние системы. паралельно запущеный скрипт читает таблицу и принимает решение о своих дальнейших действиях.
     
  3. &_&

    &_& Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Я думал о "лок файле" но что если скрипт вылетит, и файл так и останется, а след. копия не сможет запустится из-за него? Именно по этому я и заинтересовался, можно ли как-то отследить какие скрипты выполняются в данный момент, что-то вроде "таск менеджера" для ПХП
     
  4. Alex_pac

    Alex_pac Активный пользователь

    С нами с:
    11 апр 2011
    Сообщения:
    285
    Симпатии:
    1
    Адрес:
    Россия, Тольятти
    скритп сам просто так не вылетит. тут нужна внутренняя ошибка в алгоритме самого скрипта. поэтому надо предусмотреть все ситуации чтобы такой ошибки не было, а было исключение при котором скрипт запишет свое, пусть даже неудачное состояние.

    можно еще время запуска записывать в базу, чтобы можно было выявить критическое время выполнения, при котром скрипт можно считать зависшим.
     
  5. &_&

    &_& Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Ну а вообще, есть способ получить от системы список запущенных скриптов?
     
  6. Fel1ks

    Fel1ks Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    33
    Симпатии:
    0
    Так тебе же говорят: Пусть запускаемый скрипт записывает своё состояние в базу (можно время записывать и т.д.).
    При обращении в базу можно будет вытащить список запущенных скриптов ( время запуска, время остановки и т.д. - это уже дело фантазии)
     
  7. &_&

    &_& Активный пользователь

    С нами с:
    7 июн 2011
    Сообщения:
    16
    Симпатии:
    0
    Я не спрашиваю как можно сделать по другому, я спрашиваю как реализовать задуманное.