Интересует вопрос как сделать php скрипт работающий бесконечно долго. Проблема: В настройках пхп ставим макс. время выполнения крипта "0" - неограничено. Факт: скрипт отработал около 3 суток потом прекратил свою работу. Почему? Судя по логам, ни сервер ни апач не перезапускался.
while(!file_exists(LDIR_CONF . '/stop.flg')){ // для отладки использовалось: $fp = fopen( LDIR_CONF . '/rttimer.flg', "w" ); fputs( $fp, time() ); fclose($fp); }
Всегда стандартный = 10 байт. Я же открываю файл на чтение как "w", а он в таком случае открывает "чистый" файл. Если бы я открывал как "а+", вопросов бы не было, размер был бы огого...
Не знаю может это поможет, создай .bat файл и впиши в него примерно это: Код (Text): @ECHO OFF :metka C:\php5\php-cgi.exe -q index.php goto metka index.php это твой скрипт, который бесконечно должен выполнятся. Долго, не проверял но должно сработать, в виндовсе. я в index.php записал: PHP: <?php for($i=0;TRUE;$i++)echo $i."\n"; ?> пшп считает считает, и когда лимит времени приходит 30с, заново начинает) А можно и так: PHP: <?php $x=file_exists('test')?file_get_contents('test'):0; for($i=0;$i<1000000;$i++)echo ($x++)."\n"; $handle=fopen('test','w'); fwrite($handle,$x); fclose ($handle); ?> И будет считать пока до значения с мантиссой не дойдёт, когда плюс один не всчёт, скрипт продолжится, но инкремента назначемой станет, )
ось какая ? судя по всему ты пускаеш скрипт в mod_php да? т.е. под апачем? поробуй в свой бесконечный цикл вставить хоть какую нибудь паузу с помощью usleep
re> А скрипт каждый раз работает 3-е суток, или опыт проводился единожды? Дважды. Запустил второй раз, отвалился через часов 10 где-то. Сейчас запустил третий. В работе пока уже 17,5 часов. re> Сомневаюсь, что хоть один хостинг такое позволит, тут скорее арендой сервера пахнет У меня сервер. re> А тебе точно PHP нужен для этого? Ну можно конечно на сях написать, но у меня львиная доля обработки уже написана на php, не хотелось бы переписывать. re> Не знаю может это поможет, создай .bat... А можно и так: ... Вариант не прокатит. Я планирую производить достаточно большую работу с файлами. И необходимым требованием является единство процесса, который может выполнять операции с этими файлами. Аналогично необходимо выполнение также требования когда процесс не имеет права завершиться "от балды", поскольку это вынудит меня к созданию кучи ненужных механизмов по созданию и обслуживании очередей выполнения задачь - что не есть гуд. Короче нужен ТОЛЬКО 1 процесс который будет бесконечно крутиться и выполнять определенный набор операций. re> ось какая ? судя по всему ты пускаеш скрипт в mod_php да? т.е. под апачем? поробуй в свой бесконечный цикл вставить хоть какую нибудь паузу с помощью usleep LAMP. У меня в скрипте стоит sleep(10); re> процесс апача сдох Реально сам верю в это, других вариантов просто не вижу. Вопрос лишь почему и как быть?????????[/quote]
Если проблема в апаче, то можно запустить без апача. И второе слышал, что есть программы которые пшп скрипт могут скомпилировать именно, и тогда вообще и от пшп интерпретатора зависеть скрипт перестанет.
запусти без апача. Код (Text): php myscript.php или Код (Text): nohup php myscript.php & логи будут в файле nohup.out, скрипт будет выполняться в фоновом режиме.
У меня управление этим скриптом (запуск / остановка) производится из интерфейса сайта. Я оттуда не смогу выполнить команды типа этих. Либо потеряю в безопасности сервера, если разрешу запуск такого. Сегодня вот в который раз однаружил что скрипт отработал 5 day(s), 13 hour(s), 33 minute(s) и опять по непонятной причине вывалился. Печально...
Carella запускай кроном. при запуске внутри скрипта проверяй, был ли запущен другой экземпляр. Если был - выходи из текущего.
почему потеряешь? другой мега-вариант. пишешь второй скрипт, который запускаешь вышеприведенными командами. он принимает данные через файл или сокет. в своем скрипте через сайт отправляешь команду, скрипт принимает ее и запускает уже нужный. будут два скрипта - один всё время работает, а другой ты запускаешь/останавливаешь через сайт.
пшп не предназначен для подобного рода задач, в пшп даже диструктора нет, так как по сути он ненужен, потому что по завершению скрипта итак вся память высвобождается. И фиг знает чего ещё в пшп нет, для такого рода задач. При вашей проблеме нужно много данных, например ОС, Апач, как подключён пшп к Апачю, настройки, и того и другого, логи всякие, да и фиг знает чего ещё. Я уверен что ваш многодневный скрипт тут ни кто тестить не станет. Моё мнение, что ваша задача, при одном процессе(Кстати, создаётся ли процесс при запуске скрипта???), практически, нерешаема.