Насколько выполнимый демон написан на PHP, используя ignore_user abort и set_time_limit (0) - PullRequest
2 голосов
/ 17 июня 2009

Я слоняюсь с демонами и удивляюсь, насколько это возможно (с точки зрения использования памяти и процессора, а также надежности), чтобы сделать это с помощью 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('Y-m-d H:i:s') . ' Started' . PHP_EOL);
while(1) {
    fwrite($fp, date('Y-m-d H:i:s') . ' Looped' . PHP_EOL);
    if (file_exists('loop.stop')) {
        break;
    }
    // Sleep for 100 seconds
    sleep(100);
}
fwrite($fp, date('Y-m-d H:i:s') . ' Stopped' . PHP_EOL);
fclose($fp);

Этот простой пример (адаптированный из руководства по PHP для ignore_user_abort ) - это всего лишь сценарий контейнера. Фактическая функциональность будет помещена в цикл while.

Этот скрипт работает на моем ноутбуке в течение 7 часов, и он выглядит хорошо, но он мало что делает. Кто-нибудь еще пробовал это?

Ответы [ 3 ]

3 голосов
/ 17 июня 2009

Я бы предпочел поместить цикл в скрипт BASH, чтобы любые ресурсы PHP регулярно очищались.

#!/bin/bash
clear
date

php -f doChecksAndAct.php
sleep 100
# rerun myself
exec $0

Если вы выполняли какие-либо особенно сложные для настройки задачи в сценарии PHP, вы также можете поместить туда небольшой цикл (ish) (скажем, 50-100 итераций, если между ними не было пауз несколько секунд), чтобы уменьшить общее время между циклами.

Добавление: Я веду блог на пару Bash / PHP (или другого языка), так что вы можете очень легко зациклить в сценарии PHP, затем выйти, чтобы перезапустить немедленно или приостановить на некоторое время - Выполнение работы в другом месте - боковая панель с рабочим .

1 голос
/ 17 июня 2009

Я рекомендую против этого.

Существует ошибка, открытая 4 года назад, которая сообщает Память, выделенная для объектов, созданных в объектных методах, не освобождается .

Разработчики считают это запросом функции , но при использовании длительных процессов очень сложно обойти его. Я пытался, но был очень рад, когда смог удалить приложение.

0 голосов
/ 24 февраля 2010

демон sonic server, возможно, стоит проверить также

http://dev.pedemont.com/sonic

...