sw2eu/cron-command

v0.8.3 2016-09-14 15:39 UTC

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

此库实现了锁定系统。每次只能运行一个任务。如果任务正在运行,则无法手动启动它,反之亦然。

将来将添加高级文档。但如果你查看我的源代码,你会理解你可以用这个(但功能强大)的库做什么。