Есть: скрипты, которые ограничены в своих задачах, каждый отвечает за свой кусок обработки данных, если данных от предыдущего скрипта нету, то ничто не делает. Задача: 1. Заставить скрипты работать по кругу, без участия юзера, в фоне сервера 2. Делать небольшие паузы между запуском скриптов, чтоб не перегрузить ДБ 3. Не давать одному скрипту запускаться два раза параллельно Попытки решений: Крон, запускал через /usr/bin/wget -q -O /dev/null http://localhost/script.php Проблемы: 1. Самый короткий отрезок времени для крона - 1 минута, хочется быстрее, так как большинство скриптов укладываются в доли секунд 2. Есть скрипт, который работает с XML файлом более 50мб, там одно открытие файла уже занимает секунд 7-10. Ставить больше минут в кроне - замедление общей системы. Ставить минуту - может случится так, что запустятся параллельно, и будут дублировать данные, создавая ошибки. Мысль: Хотелось бы чтоб каждый скрипт в конце, завершая свою работу запускал сам себя заново, туда можно будет sleep вписать для пауз. Но из-за какой-либо ошибки скрипт может вылететь, и цепочка оборвётся. Поэтому нужен скрипт, который можно было бы запускать раз в минуту кроном, а он смотрел, запущенны ли другие скрипты из списка задач. Такое реально? Если да, помогите пожалуйства, скажите хотя бы в какую стоорну копать.
в бд создать таблицу, где отражается состояние системы. паралельно запущеный скрипт читает таблицу и принимает решение о своих дальнейших действиях.
Я думал о "лок файле" но что если скрипт вылетит, и файл так и останется, а след. копия не сможет запустится из-за него? Именно по этому я и заинтересовался, можно ли как-то отследить какие скрипты выполняются в данный момент, что-то вроде "таск менеджера" для ПХП
скритп сам просто так не вылетит. тут нужна внутренняя ошибка в алгоритме самого скрипта. поэтому надо предусмотреть все ситуации чтобы такой ошибки не было, а было исключение при котором скрипт запишет свое, пусть даже неудачное состояние. можно еще время запуска записывать в базу, чтобы можно было выявить критическое время выполнения, при котром скрипт можно считать зависшим.
Так тебе же говорят: Пусть запускаемый скрипт записывает своё состояние в базу (можно время записывать и т.д.). При обращении в базу можно будет вытащить список запущенных скриптов ( время запуска, время остановки и т.д. - это уже дело фантазии)