データベースを集中的に使用する大規模なスクリプトを実行したいのですが、プロセスが完了するまで待つ必要はありません。スクリプトを呼び出してバックグラウンドで実行し、別のページにリダイレクトしたいだけです。
編集:私は、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 &');
私はここから取った
"> /dev/null 2>&1 &" を exec 呼び出しに追加すると、期待どおりに待機しませんが、スクリプトは実行されなくなります。誰かが理由を教えてもらえますか?もしそうなら、どうすればこれを機能させることができるか教えてください。
これは許可関連の問題でしょうか?
ありがとう
EDIT : (/dev/null 2>&1 &) を使用して exec 関数を呼び出すと、出力がファイルに記録されることが問題になると想定しています。これは、それをキャンセルするためです。あれは正しいですか?