rewieer/taskschedulerbundle

使用CRON的Symfony任务调度器

安装量: 181,902

依赖项: 0

建议者: 0

安全: 0

星标: 64

关注者: 8

分支: 15

开放问题: 2

类型:symfony-bundle

0.13.0 2024-01-31 08:26 UTC

This package is auto-updated.

Last update: 2024-08-30 02:03:01 UTC


README

为使用CRON作业迁移任务的Symfony应用程序提供任务调度器,允许您定期运行任务。

要求

为了使此包正常工作,您必须在您的服务器上能够定义CRON作业。

安装

首先,将包添加到您的composer.json文件中:composer require rewieer/taskschedulerbundle

Symfony Flex将自动为您启用该包。如果您尚未使用Flex,请将包添加到您的AppKernel.php文件中。

// in AppKernel::registerBundles()
$bundles = array(
    // ...
    new Rewieer\TaskSchedulerBundle\RewieerTaskSchedulerBundle(),
    // ...
);

您现在可以开始调度了!

用法

首先,将以下行添加到您的CRON表中:* * * * * php /path/to/your/project/bin/console ts:run >> /dev/null 2>&1

这将调用调度器,它会审查所有已安排的任务并根据需要进行调度。您可以通过向命令提供任务的ID作为参数来直接调用任务。请注意,此ID由调度器生成,与该服务本身无关。

选项>> /dev/null 2>&1会丢弃任务的打印结果。移除它可以将结果通过电子邮件发送。这可能因服务器的配置而异,请参阅服务器配置。

接下来,您需要创建一个任务。任务可以是任何服务!您只需要给它一个ts.task标签并实现TaskInterface,或者为了简单起见,从AbstractScheduledTask扩展。

每X分钟

Foo\Bar\Task中安排一个每5分钟执行的任务

use Rewieer\TaskSchedulerBundle\Task\AbstractScheduledTask;
use Rewieer\TaskSchedulerBundle\Task\Schedule;

class Task extends AbstractScheduledTask {
  protected function initialize(Schedule $schedule) {
    $schedule
      ->everyMinutes(5); // Perform the task every 5 minutes
  }

  public function run() {
    // Do stuff
  }
}

您的任务现在已安排,并将每5分钟执行一次。

每X小时或每天

如果您按小时或每天安排任务,您需要在hours()everyHours()daily()之外设置minutes()。如果省略minutes(),则任务将在预定的小时内每分钟执行一次。

Foo\Bar\Task中安排一个每5小时执行的任务

use Rewieer\TaskSchedulerBundle\Task\AbstractScheduledTask;
use Rewieer\TaskSchedulerBundle\Task\Schedule;

class Task extends AbstractScheduledTask {
  protected function initialize(Schedule $schedule) {
    $schedule
      ->minutes(0)
      ->everyHours(5); // Perform the task every 5 hours on minute 0
      
    // Or if you want to perform your task at midnight every day
    // $schedule->minutes(0)->hours(0)->daily();
    
    // Or schedule your task to run once at 9AM daily (this is effectively the same as daily() above)
    // $schedule->minutes(0)->hours(9);
  }

  public function run() {
    // Do stuff
  }
}

现在您可以检查日志,看看它是否按预期工作。