sw2eu / cron-command
Requires
- kdyby/console: ~2.6
- mtdowling/cron-expression: ~1.1
- nette/di: ~2.4
- nette/reflection: ~2.4
- nette/safe-stream: ~2.3
- nette/utils: ~2.4
This package is not auto-updated.
Last update: 2024-09-14 19:04:17 UTC
README
如果你熟悉 Nette 框架 和 Symfony 控制台(特别是 Kdyby 的实现),你可能已经想到将其用于计划任务操作。此工具将帮助您维护计划任务。
要求
此库需要 PHP 5.5 或更高版本。CronCommand 库是为 Nette 框架 设计的;然而,它也可以与其他框架或纯 PHP 一起使用。
安装
安装此库的最佳方式是使用 Composer
$ composer require sw2eu/cron-command
文档
首先,注册扩展 Sw2\CronCommand\Bridges\Nette\DI\CronCommandExtension
。有关配置的更多信息,请参阅类定义。某些功能在 0.8.x 版本中可能无法工作(简单地 - 它们尚未实现),所以请耐心等待并 关注。
extension: cron: Sw2\CronCommand\Bridges\Nette\DI\CronCommandExtension
现在定义您的第一个任务。以下是我的 AwesomeTask 的完整源代码
<?php namespace App\Commands; use Sw2\CronCommand\Task; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Class AwesomeTask * @package App\Commands * * @cron 0 0 * * 0 */ class AwesomeTask extends Task { /** @var MySuperAwesomeService @inject */ public $youCanInjectYourServices; protected function configure() { $this->setName('cron:be-awesome'); $this->setDescription('Totally awesome task that would totally change your life'); } /** * @param InputInterface $input * @param OutputInterface $output * @return void */ protected function execute(InputInterface $input, OutputInterface $output) { // do something awesome $output->writeln("<info>I am awesome task!</info>"); } }
注解 @cron
使用与您从 crontab 所知相同的语法。用于解析 crontab 表达式的库是 mtdowling/cron-expression,您可以在其中找到有关语法的更多信息。带有 @
的语法目前尚不支持(也许将来会支持)。
因此现在注册您的任务到 cron 运行器
cron: tasks: - App\Commands\AwesomeTask
这样您就可以创建服务并将其直接注册到运行器中。在 CronCommandExtension
中的任务与 Nette 框架中的服务的工作方式相同。您可以仅定义类名,也可以定义包含参数、设置等的完整服务。注册您的任务的另一种方法更为自动化:只需创建服务,并用定义的标签标记它(默认标签是 sw2.cron.task
,但也可以进行配置),如下所示
services: - class: App\Commands\AwesomeTask tags: [sw2.cron.task]
您不需要定义 kdyby.console.command
,它将自动添加。这意味着每个计划任务也将自动成为控制台命令——如果需要可以手动启动。
现在您可以使用控制台命令 cron:runner
运行您的第一个计划任务。
$ php www/index.php cron:runner
此库实现了锁定系统。每次只能运行一个任务。如果任务正在运行,则无法手动启动它,反之亦然。
将来将添加高级文档。但如果你查看我的源代码,你会理解你可以用这个(但功能强大)的库做什么。