Задать вопрос
@ermolaev_nikita

Как правильно создать Бесконечно-работающий скрипт PHP?

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

Bitrix стоит и у меня на машине CentOS.
Я пытался создать процесс использую функцию pcntl_fork, но Bitrix тут же выдал ошибку:
Call to undefined function pcntl_fork() (0)

Так же попробовал через командную строку запустить скрипт с бесконечным циклом на выполнение
exec("php -f /home/bitrix/ext_www/test.org/go.php");
Но увы, система полностью повисает, видимо данный скрипт забирает на себя все процессорное время, но ведь он должен жить как сторонний процесс.
go.php:
<?
while(1) { 
//тут типа должен быть код который будет работать
sleep(100); 
} 
?>


В чем суть данного действия. У меня есть устройство, на которое должны поступать команды с ФреймВорка. В нужный момент я должен запустить скрипт, который будет работать с устройством, естественно данная операция не должна полностью блокировать сайт, а должна обрабатываться сторонним процессом.

Версия php 7.0.14
  • Вопрос задан
  • 1928 просмотров
Подписаться 4 Оценить 2 комментария
Решения вопроса 1
customtema
@customtema
arint.ru
У вас постановка задачи некорректная.

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

Какая скорость реакции скрипта требуется? Делайте решение на php-cli или делайте опрос устройства через каждые N минут или секунд. Через cron или через интерфейс или самофорканием (проверяющий скрипт отрабатывает, и перед своей смертью запускает сам себя).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
yurygolikov
@yurygolikov
gearman.org ?

php.net/manual/ru/intro.pcntl.php
"pcntl можно использовать только в CLI и CGI, но не в apache mod_php"

А еще он может быть не подключен.
"Поддержка Управления процессами в PHP по умолчанию не активна. Для включения поддержки Управления процессами вы должны скомпилировать CGI или CLI версию PHP с конфигурационным параметром --enable-pcntl "
Ответ написан
Комментировать
@vsbeats
Почитайте про написание демонов на php
https://habrahabr.ru/post/40432/
Если не работает функция pcntl_fork - это очень странно, какой у Вас версии php стоит?
Ответ написан
@ermolaev_nikita Автор вопроса
А что если используется хостинг, а не VDS, или данное решение получится сделать исключительно на VDS
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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