psf1/cron-bundle

使用请求或命令在您的PHP站点中管理动态cron作业。

维护者

详细信息

github.com/PSF1/CronBundle

源代码

安装量: 1,925

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 1

类型:symfony-bundle

1.0.2 2022-02-01 10:10 UTC

This package is auto-updated.

Last update: 2024-09-29 06:03:16 UTC


README

此包是从 'valentinmari/cron-bundle' 分支出来的,原始代码由Valentin Mari编写。

安装

  1. 使用composer下载CronBundle
  2. 如果需要,启用Bundle
  3. 在您的配置中定义cron作业

步骤 1: 使用composer下载CronBundle

运行以下命令添加CronBundle

$ composer require psf1/cron-bundle

Composer会将Bundle安装到您的项目目录中的vendor/psf1目录。

步骤 2: 启用Bundle

编辑您的.env文件并设置LOCK_DSN值。

# /.env.local

LOCK_DSN=flock

如果您使用Flex,则此步骤不是必需的。

在kernel中启用Bundle

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new CronBundle\CronBundle(),
    );
}

步骤 3: 在您的配置中定义cron作业

您的站点已准备好运行cron作业。现在,在config文件夹中的新文件cron.yml中编写它们。

#config/packages/cron.yaml

# Cron jobs.
cron:
  jobs:
    - { name: 'Test_job_1', format: '*/1 * * * *', service: 'App\Cron\TestJob1' }
    - { name: 'Test_job_2', format: '*/1 * * * *', service: 'App\Cron\TestJob2' }

  # Uncomment to execute jobs after each user request.
  # run_on_request: true

格式类似于Unix中的Cron。您必须定义一个实现JobInterface的作业类,并重新定义run()方法。在run()方法内部,您可以放置您的作业并执行任何操作。您还可以在作业类中注入内容。

// src/Cron/CacheClearCron.php
namespace App\Cron;

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\HttpKernel\KernelInterface;
use VM\Cron\JobInterface;

/**
 * Run cache clear job.
 */
class CacheClearCron implements JobInterface
{
    protected ?Application $application;

    /**
     * @param KernelInterface $kernel
     */
    public function __construct(KernelInterface $kernel)
    {
        $this->application = new Application($kernel);
        $this->application->setAutoExit(false);
    }

    /**
     * Execute job.
     *
     * @return void
     *
     * @throws \Exception
     */
    public function run(): void
    {
        $input = new ArrayInput([
            'command' => 'cache:clear',
        ]);

        $output = new NullOutput();
        $this->application->run($input, $output);
    }
}

用法

此Bundle允许两种工作方法。

  • 在每个请求中运行cron作业,如果时间到了。注意,您必须定义作业格式,以确保不会重复执行。
  • 通过控制台命令运行cron作业。

控制台命令

  • cron:job:list: 列出所有定义的cron作业及其状态。
  • cron:job:run: 运行cron作业。