我想执行一个大型的数据库密集型脚本,但不需要等待该过程完成。我只想调用脚本,让它在后台运行,然后重定向到另一个页面。
编辑:我在 Windows 7 上的本地 Zend 社区服务器上工作。我可以访问项目所在的远程 linux 服务器,所以我可以在 linux 或 windows 上执行此操作。
我有这个
public function createInstanceAction()
{
//calls a seperate php process which creates the instance
exec('php -f /path/to/file/createInstance.php');
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Instance creation process started. This may take up to a few minutes.'));
$this->_redirect('instances/adminhtml_instances/');
return;
}
这完美地工作,但magento应用程序挂起该过程完成。它完成了我所期望的一切,不时记录到文件中,并且对它的运行方式感到满意。现在我想做的就是启动这个脚本,控制器动作不会挂起,而是重定向,就是这样。根据我对 exec() 的了解,您可以通过将我在上面调用 exec() 的方式更改为:
exec('php -f /path/to/file/createInstance.php > /dev/null 2>&1 &');
我从这里拿的
如果我在 exec 调用中添加 "> /dev/null 2>&1 &" ,它不会按预期等待,但它不再执行脚本。有人能告诉我为什么吗,如果是这样,请告诉我如何让它工作?
这可能是与权限相关的问题吗?
谢谢
编辑:我假设如果我使用 (/dev/null 2>&1 &) 调用 exec 函数,将任何输出记录到文件中将是一个问题,因为这会取消它。那是对的吗?