ну, на вкус и цвет - приятелей нет
код следующий:
$tbeg=time();
$app = new Application('converter');
$app->init();
while ( time() < $tbeg + self::liveTime ) {
$app->check(); // проверяет очередь и выполняет необходимые действия
$app->save() // сохраняет состояние процесса
}
$app->finish(); // финализируется процесс; если необходимо, то в этом методе делаем перезапуск
командой system( /usr/local/bin/php-forker __FILE__ $num );
переменная $num - это номер скрипта, т.е. одноименных скриптов может быть запущено несколько (например 3 скрипта на конвертацию видео, два скрипта репликации и один на пере-индексацию)
каждый скрипт порождает свой пид-фацл, чтоб предотвратить повторные запуски. Для нескольких копий одного скрипта - используется цифровой префикс: video-convert.1.pid, video-convert.2.pid ...
Однако, раз в 3-5 мин запускается "скрипт-монитор", который отслеживает скрипт, смотрит сколько он времени работает (вдруг зациклился), и если болше чем задано, то мягко прибивает его. А если необходимого скрипта нет, то просто перезапускает его - опять же используя форкалку. так же сисадмин может отслеживать через нагиус "не нормальную" ситуацию с бэдграундовскими скриптами и при необходимости посмотреть "служебный лист запущенных скриптов" с более подробной информацией ( на какой машине какой скрипт запущен,pid, сколько времени в работе и сколько по плану и тд ).
можно использовать технологию "скрипт-демон", но нужно постоянно отслеживать чтоб не текла память, по этому и сделали с холодным перезапуском. Вроде как надежней, не исключено что есть более оптимальный вариант
Хочу заметить что данная технология использована на площадке от 40 серверов. Я сейчас там не работаю, так что не скажу точно. Возможно для более меньшего проекта это будет не оптимальным.
Александр