@ermolaev_nikita

Запуск демонов из под Фреймворка, что делать?

Доброго время суток, столкнулся со следующей проблемой. Для своего проекта мне надо создать PHP демона, который будет в фоновом режиме выполнять определенные операции, но я столкнулся со следующей проблемой. Если я вызываю скрипт из под Bitrix через админ панель, создается процесс (puu.sh/uvxga/13b12c7570.png) к которому не получается "Достучаться", он просто игнорирует сигналы, которые ему отправляются либо через админ панель (через командную строку PHP или же через запуск скрипта), либо из под консоли под рутом (Например Kill -SIGTERM ID), даже команда Kill не способна его убить. Запущенный же скрипт из консоли CentOS, напротив, хорошо откликается на, отправляемые, сигналы.

Код PHP демона:
<?php 
/** 
* @link 
*/ 
declare(ticks = 1); 

$stop = FALSE; 

/** 
* Функция перехватывающая сигналы 
*/ 
function sig_handler($signo) 
{ 
global $stop; 
switch ($signo) 
{ 
case SIGTERM: 
$stop = TRUE; 
break; 
case SIGUSR1: 
break; 
default: 
// Ловим все остальные сигналы 
} 
} 

// Регистрируем сигналы 
pcntl_signal(SIGTERM, "sig_handler"); 
pcntl_signal(SIGUSR1, "sig_handler"); 

// Форкаем процесс 
$pid = pcntl_fork(); 

echo $pid.PHP_EOL; 
if ($pid == -1) 
{ 
// Ошибка 
die('could not fork'.PHP_EOL); 
} 
else if ($pid) 
{ 
// Родительский процесс, убиваем 
die('die parent process'.PHP_EOL); 
} 
else 
{ 
// Новый процесс, запускаем главный цикл 
while( ! $stop ) 
{ 
sleep(1); 
pcntl_signal_dispatch(); 
// полезная работа 
} 
} 
// Отцепляемся от терминала 
?>


Запустить таким образом тоже не получается, фреймворк блокируется
exec("php -f /home/bitrix/www/bitrix/modules/test.testmodule/admin/start_furnace.php");

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

п.с. Все статьи о демонах на хабре прочитал!
  • Вопрос задан
  • 321 просмотр
Пригласить эксперта
Ответы на вопрос 1
@DiverUA
Попробуйте
exec("php -f /home/bitrix/www/bitrix/modules/test.testmodule/admin/start_furnace.php &");


Т.Е. добавьте &
И, желательно, никаких команд вывода не использовать
И закрывающий тег не нужен.
Ответ написан
Ваш ответ на вопрос

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

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