我想在后台进程中启动一些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
文件为空。
答案 0 :(得分:1)
也许
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
var,请删除代码的> filename
部分,但exec只会give you the last line of the result,您可能需要passthru()函数或添加{ {1}} var将每一行存储到$output
函数的数组中。