不能使用PHP exec()执行PHP脚本(在magento中)


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

我想要一些php脚本在后台进程启动。为此我在我的类

中有一个特殊的方法
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);
}

应该执行如下命令

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

但是结果是我认为脚本没有执行,magento日志是空的,out.log文件是空的。

可能

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

删除最后一个&将锁定脚本的执行,而不是将控制传递回解释器。由于您正在将所有输出管道传输到一个文件,因此可能不需要将输出管道传输到null

顺便说一下,您挂载的shell命令不会返回任何数据,因为您将所有内容都管道到文件或/dev/null如果您需要它返回到$result变量,请删除代码的> filename部分,尽管exec将只给您结果的最后一行,并且您可能需要passthru()函数或添加$output变量以将每行存储到exec函数上的数组中。