Действительно ли мудро использовать PHP для демона?

Полиморфизм полей в Java отсутствует.

Variables решение происходит во время компиляции, поэтому всегда будут доступны переменные базового класса (а не дочерние наследуемые переменные).

Поэтому всякий раз, когда происходит оживление, всегда помните

1) Доступ к переменным базового класса.

2) Будут вызываться методы подкласса (переопределенные методы, если переопределение произошло иначе, унаследованные методы, как и от родителя).

22
задан Abs 14 March 2009 в 23:34
поделиться

16 ответов

Как другие отметили, различные версии PHP имеют проблемы со своими сборщиками "мусора". Конечно, если Вы знаете, что Ваша версия не имеет таких проблем, Вы устраняете ту проблему. Точка, Вы не делаете , знают (наверняка), пока Вы не пишете демону и выполняете ее через valgrind, чтобы видеть, протекает ли установленный PHP или не на какой-либо данной машине. Таким образом на той руке, можно записать это только, чтобы обнаружить, что то, какой Пехлеви думает, фиксируется, мог бы все еще быть багги, или Вы имеете дело с немного более старой версией PHP или некоторого расширения. Неприглядный.

другой проблемой являются несколько ошибочные сигналы. По моему опыту, обработчики сигналов не всегда вводятся правильно с PHP, особенно когда сигнал ставится в очередь вместо объединенного. Это не может быть проблемой для Вас, т.е. если просто необходимо обработать SIGINT/SIGUSR1/SIGUSR2/SIGHUP.

Так, я предлагаю:

, Если демон прост, разрешение и использование PHP. Если это похоже на свою попытку стать довольно сложным, или выделить большую память, Вы могли бы рассмотреть запись его в C после разработки прототипа его в PHP.

я - симпатичное, умирают твердый человек C. Однако я ничего не вижу неправильно с выработкой чего-то быстрое использование PHP (вне случаев, которые я объяснил). Я также ничего не вижу неправильно с использованием PHP для разработки прототипа чего-то, что может или не может быть позже переписано в C. Например, обработка материала базы данных будет намного более простой при использовании PHP, по сравнению с руководящими обратными вызовами с помощью других интерфейсов в C. Таким образом в том экземпляре, для 'одного прочь', Вы, конечно, получите сделанный намного быстрее.

29
ответ дан mata 29 November 2019 в 03:41
поделиться

Пойдите для него. Я должен был сделать это однажды также. Как сказанные другие, это не идеально, но это будет get-er-done. Используя Windows, правильно? Хороший.

, Если Вам только нужен он для выполнения иногда (Однажды в час, и т.д.). Сделайте новый ярлык на свой Firefox, поместите его куда-нибудь релевантный. Откройте свойства для ярлыка, изменение "Цель" к:

"C:\Program Files\Mozilla Firefox\firefox.exe" http://localhost/path/to/script.php

Переходят к Панели управления> Точка Запланированных задач Ваша новая запланированная задача в ярлыке.

при необходимости в нем для выполнения постоянно или псевдопостоянно, необходимо будет приправить сценарий немного.

Запускают Ваш сценарий с

set_time_limit(0);
ob_implicit_flush(true);

, Если сценарий использует цикл (как , в то время как ), необходимо очистить буфер:

$i=0;
while($i<sizeof($my_array)){
     //do stuff
     flush();           
     ob_clean();
     sleep(17);
     $i++;
}
-5
ответ дан 29 November 2019 в 03:41
поделиться

Задание крона? Да.

Демон, который работает навсегда? Нет.

PHP не имеет сборщика "мусора" (или по крайней мере, в прошлый раз, когда я проверил, что он не сделал). Поэтому при создании циклической ссылки она НИКОГДА не очищается - по крайней мере, только когда основное выполнение сценария заканчивается. В процессе демона это приблизительно никогда.

, Если они добавили GC в новых версиях, тогда да, Вы можете.

-2
ответ дан MarkR 29 November 2019 в 03:41
поделиться

Задание крона и определенные сценарии удара должны быть всем, в чем Вы нуждаетесь звуками его. Можно сделать вещи как:

$file=`mysqlquery -h server < "select file from table;"`
ffmpeg $file -fps 50 output.a etc.

, таким образом, удар было бы легче записать, портировать и поддержать, по моему скромному мнению, чем использовать PHP.

0
ответ дан Robbie Averill 29 November 2019 в 03:41
поделиться

Я не рекомендовал бы это. PHP не разработан для долгосрочного выполнения. Его разработанный, прежде всего, с недолгими страницами.

, По моему опыту, PHP может иметь проблемы с просачивающейся памятью для некоторых больших задач.

0
ответ дан Kent Fredric 29 November 2019 в 03:41
поделиться

Если Вы делаете так, обратите внимание на утечки памяти. PHP 5.2 имеет некоторые проблемы со своим сборщиком "мусора", согласно это (зафиксированный в 5,3). Возможно, лучше для использования крона, таким образом, сценарий запускается чистый каждое выполнение.

1
ответ дан Fede F 29 November 2019 в 03:41
поделиться

Поскольку, что Вы описали, я пошел бы с демоном. Удостоверьтесь, что Вы засовываете сон в цикл опроса, так, чтобы Вы не бомбардировали базу данных, когда нет никаких новых задач. cronjob работает лучше на тип рабочего процесса/отчета заданий, где нет некоторого конкретного события, которое инициировало следующий запуск.

, Как упомянуто, PHP имеет некоторые проблемы с управлением памятью. Необходимо быть уверены, что Вы тестируете свой код на утечки памяти, так как они росли бы со временем в длительном сценарии. PHP не имеет реальной сборки "мусора" - Это полагается на подсчет ссылок, что означает, что циклические ссылки вызовут утечки. Если Вы знаете об этом, можно кодировать вокруг этого.

1
ответ дан troelskn 29 November 2019 в 03:41
поделиться

Вы могли бы хотеть рассмотреть создание триггера mysql , который выполняется система команда (т.е. FFmpeg) вместо демона. Если некоторая задержка не является проблемой, Вы могли бы также поместить что-то в крон, который выполняет каждые несколько минут для проверки. Крон был бы моим выбором, если это - опция.

Для ответа на вопрос php прекрасно подходит для выполнения как демон. Это не должно быть сделано в C.

1
ответ дан gpojd 29 November 2019 в 03:41
поделиться

Работая как задание крона с разумно решительной периодичностью, Сценарий PHP может сделать задание, и производственная устойчивость, конечно, достижима. Вы могли бы хотеть ограничить количество одновременных экземпляров FFMpeg и убедиться иметь вход законченного приложения и обработку исключений. Я реализовал непрерывно процессы опроса выполнения в Java, а также every-ten-minute cron'd Сценарий PHP, и оба делают задание приятно.

2
ответ дан karim79 29 November 2019 в 03:41
поделиться

Задание крона, вероятно, работало бы просто великолепно, если почти мгновенные действия не требуются.

я как раз собираюсь поместить живой, система, которую я создал, на основе демона организации очередей 'beanstalkd'. Я отправляю различные маленькие сообщения от (в этом случае, PHP), веб-страница зовет демона, и Сценарий PHP тогда берет их от очереди и выполняет различные задачи, такие как изменение размеров изображений или проверка баз данных (часто пасующий назад информацию через Основанное на кэш-памяти хранилище).

Для предотвращения продолжительных процессов я обернул его в сценарий Bash, это, в зависимости от значения, возвращенного из сценария ("выход (1)";) перезапустит сценарий, для каждого (говорить) 50 задач, он выполняется. Если это перезапустит, потому что я планирую его на, это сделает так немедленно, любое другое значение выхода (значение по умолчанию 0, таким образом, я не использую это), приостановился бы за несколько секунд до того, как это было перезапущено.

3
ответ дан Alister Bulman 29 November 2019 в 03:41
поделиться

Одна проблема с правильно daemonizing Сценарий PHP состоит в том, что PHP не имеет интерфейсов к дубликату () или dup2 () syscalls, которые необходимы для отсоединения дескрипторов файлов.

4
ответ дан janneb 29 November 2019 в 03:41
поделиться

Я буду обратным и рекомендую судить php демона. Это - по-видимому, язык, Вы знаете лучшее. Вы, по-видимому, включите таймер в любом случае, таким образом, можно будет копировать частоту запросов на базе данных. Нет действительно никакого штрафа, пока Вы не наивно цикличное выполнение на запросе.

, Если это - что-то не выполняемое часто, Вы могли бы альтернативно выполнить php от крона, позволение youor код истощает очередь и затем умирает.

, Но не боятся придерживаться с тем, что Вы знаете лучше всего как первое приближение.

Попытка не использовать триггеры. Они наложат ненужную связь, и они не забава протестировать и отладить.

6
ответ дан dkretz 29 November 2019 в 03:41
поделиться

Php не немного лучше или хуже для такого рода вещи, чем ни один из других общих языков сценариев. Это имеет довольно полный доступ ко всем системным вызовам и утилитам библиотеки, необходимо было бы сделать этот вид работы. Если Вы будете самым удобным использованием PHP для сценариев, то php сделает задание для Вас.

единственное вниз сторона - то, что php не совсем так же повсеместен как, скажем, жемчуг или Python, который установлен почти на каждой разновидности Unix. Php только найден в системах, которые будут служащим динамическим веб-контентом. Не то, чтобы интерпретатор Php является слишком большим или дорогостоящим для установки также, но если самое большое беспокойство получает программу ко многим системам, которые могут быть небольшим препятствием.

7
ответ дан SingleNegationElimination 29 November 2019 в 03:41
поделиться

Я был бы склонен выполнить эту задачу с заданием крона, вместо того, чтобы опросить базу данных в демоне.

вероятно, что Ваша команда FFmpeg будет требовать времени, чтобы сделать, это - вещь, правильно? В этом случае действительно необходимо постоянно опросить базу данных? Не был бы cronjob, работающий каждую минуту (или каждые пять, десять или двадцать минут в этом отношении) более простой способ должным быть достигнуть того же самого?

17
ответ дан Dominic Scheirlinck 29 November 2019 в 03:41
поделиться

При объединении ответов от Kent Fredric tokenmacguy и Domster, Вы получаете что-то полезное.

php, вероятно, не хорош в течение долгого времени выполнения, поэтому давайте сохраним каждый цикл выполнения коротким и удостоверьтесь, что ОС заботится об очистке любого memoryleaks. Поскольку инструмент для запуска крона сценария PHP может быть хорошим инструментом. И если Вы делаете это как этот, нет большого различия между языками.

Однако вопрос все еще стоит. php даже способен для выполнения как нормальный демон в течение долгого времени (несколько лет)? Или будет различный memoryleaks съедать весь свой поршень и уничтожать систему?

/Johan

1
ответ дан Johan 29 November 2019 в 03:41
поделиться

Если вы решили пойти по пути демона, есть отличный модуль PEAR, называемый System_Daemon , который я недавно успешно использовал при установке PHP v5.3.0. Это задокументировано в блоге авторов: http: //kevin.vanzonneveld. net / techblog / article / create_daemons_in_php

Если у вас установлен PEAR, вы можете установить этот модуль, используя:

pear install -f System_Daemon

. Вам также потребуется создать сценарий инициализации: /etc/init.d/

Затем вы можете:

  • Запустить демон: /etc/init.d/projNotifMailDaemon start
  • Остановить демон: /etc/init.d/projNotifMailDaemon stop

Журналы хранятся по адресу: / var / log / .log

1
ответ дан 29 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: