psf1 / cron-bundle
使用请求或命令在您的PHP站点中管理动态cron作业。
1.0.2
2022-02-01 10:10 UTC
Requires
- php: ^7.4 || ^8.0
- doctrine/orm: ^2.0
- setono/cron-expression-bundle: ^1.4
- symfony/config: ^5.4 || ^6.0
- symfony/lock: ^5.4
This package is auto-updated.
Last update: 2024-09-29 06:03:16 UTC
README
此包是从 'valentinmari/cron-bundle' 分支出来的,原始代码由Valentin Mari编写。
安装
- 使用composer下载CronBundle
- 如果需要,启用Bundle
- 在您的配置中定义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作业。