qrotux/phalcon-cron

Phalcon的Cron组件。

0.2.1 2019-01-08 04:42 UTC

This package is not auto-updated.

Last update: 2024-09-26 06:54:53 UTC


README

Phalcon的Cron组件。

Build Status Build Status Scrutinizer Code Quality Code Climate Test Coverage

安装

使用Composer安装

{
	"require": {
		"sidroberts/phalcon-cron": "dev-master"
	}
}

您还需要将console添加到DI中

$di = new \Phalcon\Di();

// ...

$console = new \Phalcon\Cli\Console();

// ...

$di->setShared("console", $console);

// ...

$console->handle($arguments);

示例

Crontab

* * * * * /usr/bin/php /path/to/cli.php cron

DI

$di->set(
	"cron",
	function () {
		$cron = new \Sid\Phalcon\Cron\Manager();
		
		$cron->add(
			new \Sid\Phalcon\Cron\Job\Callback(
				"* * * * *",
				function () {
					// ...
				}
			)
		);
		
		$cron->add(
			new \Sid\Phalcon\Cron\Job\Phalcon(
				"0 * * * *",
				[
					"task"   => "task",
					"action" => "action",
					"params" => "params"
				]
			)
		);
		
		$cron->add(
			new \Sid\Phalcon\Cron\Job\System(
				"* 0 * * *",
				"sh backup.sh"
			)
		);
		
		return $cron;
	}
);

CLI任务

class CronTask extends \Phalcon\Cli\Task
{
	public function mainAction()
	{
		$this->cron->runInBackground();
	}
}

前台与后台

在前台运行任务(顺序执行)

Job1 -------->
Job2          ----------------->
Job3                            ---->

在后台运行任务(并行执行)

Job1 -------->
Job2 ----------------->
Job3 ---->

对于大多数应用程序,建议使用->runInBackground(),因为这通常是Cron实现的方式,并且通常更快。如果您特别需要访问每个Cron任务的输出,请使用->runInForeground()

->runInBackground()返回一个进程实例数组。->runInForeground()返回一个输出数组。

等待、终止和杀死

默认情况下,所有后台进程都会注册一个关闭函数,该函数强制PHP脚本在关闭之前等待任务完成。如果需要等待进程完成,可以在进程实例上调用->wait()

您还可以在进程上使用->terminate()->kill()来发送终止和杀死信号。

->wait()->terminate()->kill()也适用于Manager实例,并且将等待、终止或杀死所有进程。

在自定义时间运行任务

通过将\DateTime传递给->getDueJobs(),您可以查看在特定时间到期的任务

$datetime = new \DateTime("2015-01-01 00:00:00");

$cron->getDueJobs($datetime);

您还可以将\DateTime传递给->runInForeground()/->runInBackground()来运行在特定时间到期的任务。

$datetime = new \DateTime("2015-01-01 00:00:00");

$cron->runInBackground($datetime);

从Crontab添加任务

您还可以从Crontab文件添加任务,例如这个

* * * * * /usr/bin/php /path/to/cli.php cron
$cron = new \Sid\Phalcon\Cron\Manager();

$cron->addCrontab("/path/to/crontab");

从Crontab获取系统任务实例数组

$crontab = new \Sid\Phalcon\Cron\CrontabParser("/path/to/crontab");

$jobs = $crontab->getJobs();