Разумно ли использовать PHP для демона? - PullRequest
22 голосов
/ 15 марта 2009

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

Вот мои требования к демону.

  • Постоянно проверять, была ли строка добавлено в таблицу базы данных MySQL
  • Запустите команды FFmpeg на том, что было извлечено из базы данных
  • Вставить вывод в таблицу MySQL

Я не уверен, что еще я могу предложить, чтобы помочь принять это решение. Просто чтобы добавить, я не делал C раньше. Только Java и PHP и базовые скрипты bash.

Имеет ли это даже большую разницу в производительности?

Пожалуйста, учтите мое невежество, я учусь! :)

Спасибо всем

Ответы [ 17 ]

1 голос
/ 15 марта 2009

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

Чтобы ответить на ваш вопрос, php прекрасно работает как демон. Это не должно быть сделано в C.

1 голос
/ 12 ноября 2009

Если вы решили пойти по маршруту демона, есть отличный модуль 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/<your_daemon_name>

Тогда вы можете:

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

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

0 голосов
/ 17 марта 2009

Перейти на это. Я должен был сделать это и один раз. Как говорили другие, это не идеально, но сработает. Используя 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++;
}
0 голосов
/ 15 марта 2009

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

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

так что bash проще написать, перенести и поддерживать IMHO, чем использовать PHP.

0 голосов
/ 15 марта 2009

Cron работа? Да.

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

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

Если они добавили сборщик мусора в новых версиях, то да, вы можете.

0 голосов
/ 09 ноября 2015

Если вы знаете, что делаете, обязательно. Вы должны хорошо понимать свою операционную систему. PHP обычно не подходит для большинства демонов, потому что он не многопоточный и не имеет достойной системы событий для всех задач. Однако, если это соответствует вашим потребностям, то нет проблем. Современный PHP (5.3+) действительно стабилен и не имеет утечек памяти. Пока вы включаете GC и не реализуете собственные утечки памяти и т. Д., Все будет в порядке.

Вот статистика для одного демона, который я запускаю: время работы 17 дней (последний перезапуск из-за обновления PHP). записано байтов: 200GB соединения: сотни обработано соединений, сотни тысяч обработанных товаров / запросов: миллионы

node.js, как правило, лучше подходит, хотя и имеет небольшие неудобства. Были предприняты некоторые попытки улучшить PHP в тех же областях, но они не так уж хороши.

0 голосов
/ 15 марта 2009

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

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

...