Denis Óbukhov
Denis Óbukhov

Reputation: 4150

Can't execute PHP script using php exec() (in magento)

I want some php script to be launching in a background proccess. For this i have a special method in my class

protected function _runSpider()
{
    $php = exec('which php');
    $result = exec($php . ' ' . Mage::getBaseDir() . '/spider.php > ' . Mage::getBaseDir() . '/var/log/out.log 2>&1 &');
    Mage::log($result);
}

this should execute something like this

/usr/bin/php /home/www/spider.php > home/www/var/log/out.log 2>&1 &

But in result as i think script is not executing, magento log is empty and out.log file is empty.

Upvotes: 1

Views: 1765

Answers (1)

planestepper
planestepper

Reputation: 3297

Maybe

protected function _runSpider()
    {
        $command = '$(which php) ' . Mage::getBaseDir() . '/spider.php > ' . Mage::getBaseDir() . '/var/log/out.log');
        $result = exec($command);
        Mage::log($result);
    } 

Removing the last & will lock execution of the script instead of passing control back to the interpreter. And since you're piping all of the output to a file, maybe you don't need to pipe the output to null.

By the way, the shell command you mounted won't return any data as you're piping everything to a file or /dev/null. If you need it back to the $result var, remove the > filename part of the code, though exec will only give you the last line of the result and you may need the passthru() function or add an $output var to store every line to an array on the exec function.

Upvotes: 1

Related Questions