1

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.

5
  • Do you have safe mode enabled? Commented Sep 17, 2011 at 14:40
  • Also check if "exec" is disabled on your host - do you see it in the list returned by: ini_get('disable_functions') Commented Sep 17, 2011 at 14:51
  • exec('which php') works good, safe mode is disabled Commented Sep 17, 2011 at 14:55
  • If out.log exists but is empty then it must have been created by the pipe command but the spider outputs nothing. Check that it is running by having it modify a file directly. Commented Sep 17, 2011 at 18:42
  • Have you tried to run this script outside of magento, from another simple php script? Does it work? Commented Sep 17, 2011 at 19:32

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.