joesweeny / schedule

此包最新版本(0.1.1)无可用许可信息。

0.1.1 2018-03-02 10:28 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:43:14 UTC


README

一个极其轻量级的库,用于创建和过滤基于控制台的命令,这些命令可以按计划执行

使用方法

单个任务可以用或不用参数实例化

use JoeSweeny\Schedule\Task;

$task1 = new Task('delete:files');

$task2 = new Task('notify:users', ['--admin']);

实例化时,可以添加任务频率,以便让计划知道何时需要运行任务

use JoeSweeny\Schedule\Task;

$task1 = new Task('delete:files');

// Task will run every Monday at 00:00
$task1->weekly();

// Additional frequency methods can be chained to the Task to be more specific

$task2 = new Task('notify:users', ['--admin']);

// Task will run every Wednesday at 09:00AM
$task2->wednesdays()->at('09:00');

// Note any Task without a frequency specified will automatically run every minute of every day

可以将单个任务添加到计划中

use JoeSweeny\Schedule\Task;
use JoeSweeny\Schedule\Schedule;

$task1 = (new Task('delete:files'))->sundays();

$task2 = new Task('notify:users', ['--admin']);

$schedule = new Schedule;

$schedule->addTask($task1)->addTask($task2);

$schedule->getTasks() 
// Will return [(new Task('delete:files'))->sundays(), new Task('notify:users', ['--admin'])] 

一旦计划中有了任务,就可以根据当前需要运行的任务过滤任务

use JoeSweeny\Schedule\Task;
use JoeSweeny\Schedule\Schedule;

$task1 = (new Task('delete:files'))->sundays();

$task2 = new Task('notify:users', ['--admin']);

$schedule = new Schedule;

$schedule->addTask($task1)->addTask($task2);

$schedule->getDueTasks();
// Will return an array of Task objects ready to be executed

一旦过滤出待执行的任务,它们可以由消费应用单独执行。示例使用Symfony Console,尽管可以使用其他库

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\BufferedOutput;
use JoeSweeny\Schedule\Task;
use JoeSweeny\Schedule\Schedule;

$schedule = new Schedule;

$application = new Application('CLI Application');

$schedule
    ->addTask((new Task('delete:files'))->sundays())
    ->addTask(new Task('notify:users', ['--admin']));

$due = $schedule->getDueTasks();

foreach($due as $task) {
    $application->run(new StringInput($task->execute()), $output = new BufferedOutput);
}