如何从控制器在后台运行 Shell,并在 CakePHP 中执行时更新数据库



我正在做CakePHP 3.4项目。

我必须执行一些命令来扫描特定目录的文件和目录。这可能需要很长时间,具体取决于目录的大小,因此我想在后台运行它并在视图中标记正在运行的标签,直到它成功执行。

如何在后台从控制器运行 Shell 任务并在执行时更新数据库?

我是壳牌任务的新手。

如果这是一项耗时的任务,那么您的想法是在后台运行它。您将需要使用某种形式的队列系统,该系统允许您将作业添加到队列中,然后可以通过从 cronjob 运行队列在后台运行该队列。看看队列插件来做到这一点。

您基本上需要创建一个队列任务,其中包含您需要在后台运行的功能,然后将作业添加到将在后台运行该任务的队列中。队列插件的文档显示了如何执行此操作,并且插件中包含大量示例队列任务。

如果需要指示排队作业的状态,可以将作业的 ID 保存在会话中,并在加载页面时检查它是否完成。

您可以从控制器调度命令行管理程序任务。如果你想在后台运行它,你可以,例如,通过JavaScript/Ajax运行这个控制器操作。

// maybe this task runs looooong
set_time_limit(0);
$shell = new ShellDispatcher();
$output = $shell->run(['cake', 'bake', 'model', 'Products']);
if ($output === 0) {
    $this->Flash->success('Yep!');
} else {
    $this->Flash->error('Nope!');
}

但你至少可以用谷歌搜索一下。

编辑 忘记这个,去找博士的答案。

相关内容

最新更新