Я обманываюсь с демонами и задаюсь вопросом, насколько это возможно (с точки зрения использования памяти и процессора, и надежности), чтобы это сделать с помощью PHP:
<?php // Ignore user aborts and allow the script // to run forever ignore_user_abort(true); set_time_limit(0); $fp = fopen('loop.log', 'w'); fwrite($fp, date('Ymd H:i:s') . ' Started' . PHP_EOL); while(1) { fwrite($fp, date('Ymd H:i:s') . ' Looped' . PHP_EOL); if (file_exists('loop.stop')) { break; } // Sleep for 100 seconds sleep(100); } fwrite($fp, date('Ymd H:i:s') . ' Stopped' . PHP_EOL); fclose($fp);
Этот простой пример (адаптированный из руководства PHP для ignore_user_abort ) – это только контейнерный скрипт. Фактическая функциональность будет помещена внутри цикла while.
У меня этот скрипт работает на моем ноутбуке в течение 7 часов, и все выглядит отлично, но это мало что делает. Кто-нибудь еще это пробовал?
Я бы поставил цикл в BASH-скрипт, так что любые ресурсы PHP регулярно очищаются.
#!/bin/bash clear date php -f doChecksAndAct.php sleep 100 # rerun myself exec $0
Если вы выполняли какие-либо особенно тяжелые задания в скрипте PHP, вы также могли бы разместить небольшой (ish) цикл (например, 50-100 итераций, если они не останавливали несколько секунд между ними), чтобы уменьшить общее количество накладное время между прогонами.
Дополнение: я написал блог на стыке Bash / PHP (или другого языка), чтобы вы могли очень легко зацикливаться на PHP-скрипте, а затем выйти для немедленного перезапуска или приостановить какое-то время – Выполнение работы в другом месте – Боковая панель, запускающая рабочий .
Я рекомендую против этого.
4 года назад появилась ошибка, в которой говорится, что память, выделенная для объектов, созданных в методах объектов, не выпущена .
Разработчики считают этот запрос Feature, но при использовании длительных процессов его очень сложно обойти. Я попытался, но был очень рад, когда смог уволить заявление.
son server daemon, возможно, стоит проверить, а также