token27/cakephp-scheduled-plugin

CakePHP 的定时插件。

安装次数: 565

依赖: 0

建议者: 0

安全性: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

类型:cakephp-plugin

v1.0.0 2021-01-29 05:12 UTC

This package is auto-updated.

Last update: 2024-09-16 17:20:09 UTC


README

CakePHP 4.x 的 Cron 定时插件

目录

介绍

Scheduled 允许您直接从 PHP 文件中编写 cron 任务。它适用于 CakePHP Shell 以及任何其他有效的 PHP 代码。基本上它是一个传统 crontab 文件的替代品。

为什么使用它

传统编写 cron 任务的常规方法是每次需要安排一个任务时,在 crontab 文件中放置一个条目。这种方法的缺点是您每次都必须登录(SSH)到服务器。

通过使用 Scheduled,我们能够将 cron 任务放置在源代码控制系统中,就像其他任何 PHP 代码一样部署到生产环境中。

安装

  • 要安装 Scheduled 插件,您可以使用 composer。从您的应用程序根目录(composer.json 文件所在的位置)运行以下命令

    composer require token27/cakephp-scheduled-plugin

  • 通过以下命令加载插件

    path-to-project/bin/cake plugin load Scheduled

  • 或者,您可以在应用程序的文件中添加以下行: path-to-project/config/bootstrap.php

    Plugin::load('Scheduled');

启动定时任务

我们只需要安装一个每分钟运行一次的普通 cron 任务。这个 cron 任务将使 Scheduled 能够安排所有后续的任务

* * * * * /path-to-project/bin/cake Scheduled run

定义计划

计划基本上是一个以 Scheduled 为前缀并以 Task.php 结尾的 PHP 文件,它必须返回 Scheduled 对象。所有计划都应该放在一个名为 ScheduledTasks 的文件夹中。这个文件夹必须位于 composer.json 文件所在的根目录。

例如

// path-to-project/src/ScheduledTasks/ScheduledBackupTask.php

use Scheduled\Scheduled\Scheduled;
$schedule = new \Scheduled\Scheduled\Scheduled();
$scheduled
    ->run('/usr/bin/php backup.php')
    ->daily()
    ->description('Test');

// IMPORTANT: You must return the scheduled object
return $scheduled;

安排 CakePHP Shell

要安排一个 CakePHP Shell,调用 Scheduled::shell

$scheduled->shell('MyCake awesome')

安排任何其他命令

要安排任何其他命令,调用 Scheduled::run

$scheduled->run('/usr/bin/php backup.php')

频率选项

有许多定义执行频率的方法

在内部,Scheduled 使用了优秀的 lavary/crunz 库。它提供了大量的选项来配置执行频率。如果您想了解更多可用的频率,请查看其官方文档。

任务运行前

要在任务执行前执行某些操作,我们可以使用 before() 钩子

例如

use Scheduled\Scheduled\Scheduled;
$schedule = new \Scheduled\Scheduled\Scheduled();

$scheduled
    ->run('/usr/bin/php backup.php')
    ->before(function() { 
        // Do something before the job runs
     })
    ->daily()
    ->description('Test');

// IMPORTANT: You must return the scheduled object
return $scheduled;

任务完成后

要在任务执行后执行某些操作,我们可以使用 after() 钩子

例如

use Scheduled\Scheduled\Scheduled;
$schedule = new \Scheduled\Scheduled\Scheduled();

$scheduled
    ->run('/usr/bin/php backup.php')
    ->after(function() { 
        // Do something after the job is finished
     })
    ->daily()
    ->description('Test');
	
// IMPORTANT: You must return the scheduled object
return $scheduled;