shapecode/cron-bundle

此包提供对 Symfony 命令的定时执行


README

paypal

PHP Version Latest Stable Version Latest Unstable Version Total Downloads Monthly Downloads Daily Downloads License

此包提供了一种简单的方法来在应用程序中注册重复的定时任务。

安装说明

通过以下简单步骤安装此包

通过 composer 将包添加到您的项目中

composer require shapecode/cron-bundle

如果 flex 没有为您完成,请将包添加到您的配置中

<?php

// config/bundles.php
return [
    // ...
    Shapecode\Bundle\CronBundle\ShapecodeCronBundle::class,
    // ...
];

更新您的数据库模式 ...

... 使用 Doctrine 模式更新方法 ...

php bin/console doctrine:schema:update --force

创建自己的任务

使用 CronBundle 创建自己的任务非常简单 - 您只需创建一个普通的 Symfony2 命令(或 ContainerAwareCommand)并使用 CronJob 注解标记它,如下所示

<?php

declare(strict_types=1);

namespace App\DemoBundle\Command;

use Shapecode\Bundle\CronBundle\Attribute\AsCronJob;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

#[AsCronJob('*/5 * * * *')]
class DemoCommand extends Command
{
    
    public function configure() : void
    {
		// Must have a name configured
		// ...
    }
    
    public function execute(InputInterface $input, OutputInterface $output) : void
    {
		// Your code here
    }
}

间隔指定(如上例中的 "*/5 * * * *")使用标准的 cronjob 调度格式,您可以根据需要修改它。在这个例子中,您必须转义 /,因为它会关闭注解。您还可以通过多次使用注解并使用不同的值来注册您的命令多次。为了使您的 CronJob 被扫描并包含在未来的运行中,您必须首先运行 php bin/console shapecode:cron:scan - 它将被安排在您运行 php app/console shapecode:cron:run 的时候执行

注册您的新 Cron

$ php bin/console shapecode:cron:scan
$ php bin/console shapecode:cron:run

自动运行您的 cron 作业

此包的设计理念是您的任务将以最小的间隔运行 - 任务将不会比您计划得更频繁地运行,但它们只能在你触发时运行(通过运行 bin/console shapecode:cron:run)。

为了便于操作,您可以在系统上创建一个类似于这样的 cron 作业

*/5 * * * * php /path/to/symfony/bin/console shapecode:cron:run

这将安排您的任务每隔大约 5 分钟运行一次 - 例如,计划每 3 分钟运行的任务将只每 5 分钟运行一次。

从命令行禁用和启用单个 cron 作业

此包允许您轻松地从命令行禁用和启用单个计划好的 CronJob。

禁用 CronJob,请运行: bin/console shapecode:cron:disable your:cron:job,其中 your:cron:job 是您想禁用的项目中 CronJob 的名称。

运行上述命令将禁用您的 CronJob,直到您手动再次启用它。请注意,尽管 cron_job 表上的 next_run 字段仍然包含 datetime 值,但您的禁用 cronjob 不会运行。

启用 cron 作业,请运行: bin/console shapecode:cron:enable your:cron:job,其中 your:cron:job 是您想启用的项目中 CronJob 的名称。

配置

默认情况下,所有cron作业都会运行直到完成(或超过由进程组件设置的默认超时时间60秒。当从控制器中运行cron作业时,设置cron作业的超时时间可能很有用,因为HTTP请求可能会因为PHP的最大执行限制而被杀死。通过指定超时,所有作业都会自动被终止,并且会持久化正确的作业结果(这将不会指示任何成功),请参阅#26。默认值为null,让进程组件使用其默认超时,否则应用指定的超时时间(以float形式表示,单位为秒),请参阅进程组件文档重要:超时适用于每个cron作业,无论它是从控制器还是CLI执行。

shapecode_cron:
    timeout: null # default. A number (of type float) can be specified