Есть PHP скрипт который в цикле выполнят функцию (Время выполнение функции 1-60сек) Как обеспечить максимальный UpTime данному скрипту? Одна из моих идей: 1) Поставить крон на каждую минуту 2) Из скрипта раз в 30-60 сек записывать контрольную точку в memcached/mysql/в файл 3) При каждом из запуске проверять контрольную точку, если она устарела более чем на 2-5мин, запускать скрипт
В плане uptime? uptime это непрерывная работа чего-то... У тебя скрипт не является демоном. Зачем 3-тий пункт? Ты себе жизнь усложняешь. Засовываешь скрипт в кронтаб - это самый универсальный и правильный способ, и пишешь как часто он должен вызываться. Во время работы скрипта, можно сделать так, чтобы скрипт создавал pid файл для предотвращения запуска скрипта одновременно двух и больше раз. Как вариант можно скрипт переделать под демона и научить сигналам . Тогда его с кронтаба вообще не нужно вызывать.
С демоном очень интересно. Есть какие нибудь просты способы реализовать? Передавать сигналы не нужно. Скрипт примерно такой: PHP: while(1){ $Temp = f(); //Параметров нету if($Temp == 0){sleep(5);} }
Что-то вроде такого: PHP: <?php $child_pid = pcntl_fork(); if( $child_pid ) exit; posix_setsid(); while(1) { $Temp = f(); if($Temp == 0) sleep(5); } ?> Если есть на руках консоль и лень править код, как вариант еще можно заюзать программу screen и запустить скрипт с бесконечным циклом непосредственно внутри screen. Неплохой вариант. Если все же интересна демонизация родными средствами интерпретатора PHP, советую почитать вот эти статьи: _habrahabr.ru/blogs/php/134620/ _habrahabr.ru/blogs/php/40432/
Прочитал, подумал, немного практики. И примерно такой вариант: 1) Cron каждую минуту который запускает демона 2) Запись и проверка PID сдерживают повторный запуск Я правильно понимаю?
Не понял тебя. Если скрипт писать/переписывать под демон, никакого cron'а ненужно. Один раз запускаем типа так: Code: php myscript.php start скрипт форкается и все. Консоль свободна, а скрипт висит в процессах как и любой другой демон. crontab нужен только в тех случаях, если скрипт после того как отработал закрывается. Не обязательно, но в случае если скрипт из кронтаба вызывается, то да, это основная идея. У меня была такая ситуация.... запускается скрипт и начинает работать. За 1-3 минуты он должен завершать свою работу, но в один прекрасный солнечный день, из-за большого потока данных он проработал около 6 минут. В кронтабе скрипт вызывается каждую 5-тую минуту, и получается такая ситуация: Вызывается этот скрипт во время того, как первый экземпляр скрипта еще работает.
Сlodo.ru сделает системный reboot и скрипт уже не работает, а я тихо сплю и не подозреваю об этом. Поэтому решил подстраховаться и запускать его каждую минуту. Интересную вещь заметил: 1) Запускаю скрипт из консоли 2) Скрипт отвязывается и начинает работать 3) Ошибки которые возникают в процессе выполнения (Например Time Out) падают в консоль. Так должно быть?
В этих случаях демоны вносятся в автозагрузку init.d дистрибутива. Зависит от настройки интерпретатор PHP.
Не понял что нужно, задать таймоут или подавить ошибку? Если подавить ошибку то через собачку. Code: @file_get_contents("http://example.com/", 0, $ctx); PHP: <?php $ctx = stream_context_create(array( 'http' => array( 'timeout' => 10 ) ) ); file_get_contents("http://example.com/", 0, $ctx); ?>
Нужно было избавится от вывода сообщений/ошибок в консоль после создание демона и отвязки от консоли, STDOUT и STDERR помоги решить эту проблему