【问题标题】:Manually call a cron task Symfony 1.4手动调用 cron 任务 Symfony 1.4
【发布时间】:2026-02-16 22:25:04
【问题描述】:

我在 myProject/lib/task 下放置了一个 cron 任务。这个 cron 每天工作一年多。

但是现在我必须在我的项目中创建一个按钮,以便在我的客户需要时执行与 cron 相同的过程。代码太复杂,我无法通过正常的操作重写所有内容。

有没有办法从正常操作中调用 cron 任务?

【问题讨论】:

  • 你确定这是一个 cron 任务吗?我认为这是 cron 在特定时间执行的 symfony 任务。任务的目的是什么?这是一项长期运行的重量级任务,具有高 CPU 和/或内存使用率或轻量级任务?如果它是轻量级的,您应该重构它的代码以在操作中可重用。您不必从头开始重写它。
  • 我正在尽我所能用英语交流,但是 cron 执行的 Symfony 任务和 cron 任务对我来说听起来是一样的。此任务连接到外部 Web 服务并更新表,它很复杂,因为 Web 服务的文档记录很差,而且它们的功能名称不友好,所以我的团队中没有人真正记得/理解这段代码是如何工作的,因为它写了一年以前。

标签: cron symfony-1.4


【解决方案1】:

您可以通过以下方式从操作中调用任务,您只需添加一个链接即可。我在示例中使用了标准的 Symfony 'Clear Cache' 任务,但您可以将其更改为您的:

public function executeRunTaskTest(sfWebRequest $request)
{
  // need to be working in the project root
  chdir(sfConfig::get('sf_root_dir'));

  // init the task we want to run
  $task = new sfCacheClearTask($this->dispatcher, new sfFormatter());

  // run the task
  $task->run(
    array(), // array of arguments
    array(
      'app' => 'frontend',
      'env' => 'prod',
      'type' => 'all',
    ) // array of options
  );

  // back to where we came from
  $this->redirect($request->getReferer());
}

您也可以使用 PHP exec()shell_exec() 函数,但这个 Symfony 解决方案可能更简单。 :)

【讨论】:

  • 谢谢。它需要更多测试,但这正是我想要的。