Не може да стартира PHP с помощта на командата exec

Имам проблем с изпълнението на непрекъснат фонов процес, в който родителят инициира 2 или 3 дъщерни процеса, след което се прекратява, дъщерните процеси имат тежки изчисления, така че ще отнемат много време.

Използвам команда exec, за да стартирам процеса, но не знам, че не стартира, нито генерира грешка (отчитането на грешки е включено, E_ALL и display_errors)

Ето как се опитвам да направя това

error_reporting(E_ALL);
ini_set('display_errors',1);
$output = '';
$dir = dirname(__FILE__).'/';
//$cmd = "nohup php {$dir}/background-service.php > /dev/null & echo $!";
$cmd = "nohup php background-service.php >/dev/null 2>&1 &";
exec($cmd );

фонова услуга.php

<?php
ini_set('max_execution_time', 0);
ini_set('display_errors',1);

file_put_contents('a'.time().'.txt',"this is the test code");

?>

когато натисна файла директно, той генерира файл, но не с exec, тествах exec е активиран (ubuntu сървър)

if ( $safe_mode = ini_get( 'safe_mode' ) && strtolower( $safe_mode ) != 'off' )
{
    echo 'Safe Mode is Disabled';
}
else
    echo 'Safe Mode is Enabled<br/>';


if ( in_array( 'exec', array_map( 'trim', explode( ',', ini_get( 'disable_functions' ) ) ) ) )
{
    echo 'exec is Disabled';
}
else
echo 'exec is Enabled<br/>';

Моля, някой да ми каже къде греша в него, как мога да открия дали е деактивиран от сървъра

Благодаря


person MZH    schedule 28.02.2013    source източник
comment
благодаря, работи с пълен път, работи, но проблемът е, че искам run.php да стартира php файла и да завърши нормално, в момента чака exec файлът да се изпълни напълно, трябва просто да го извика и да се прекрати   -  person MZH    schedule 28.02.2013


Отговори (2)


Това е само предположение, но опитайте да използвате пълния път на всичко, което изпълнявате. Изпълнението на командата от shell може да работи за ВАШИЯ потребителски акаунт, но имайте предвид, че процесът се изпълнява като потребител на apache.

Също така, използването на exec() с допълнителни параметри може да бъде полезно за вас. Третият параметър може да посочи къде да се съхранява състоянието на връщане на командата (вероятно ще ви помогне да разберете това). (с любезното съдействие на ръководството за PHP)

person thatthatisis    schedule 28.02.2013

Проверете този безопасен режим -exec-dir и не е необходимо да задавате максимално време за изпълнение на скриптове от командния ред по подразбиране, те нямат ограничение.

person Gustek    schedule 28.02.2013