daycry/cronjob

Codeigniter 4 的 Cronjob 库

安装次数: 21,356

依赖关系: 3

建议者: 0

安全性: 0

星标: 64

关注者: 4

分支: 20

开放问题: 0

语言:JavaScript

v2.2.29 2024-08-12 12:40 UTC

README

Donate

注意

如果你想要使用队列系统,可以使用 queues vendor

CodeIgniter 任务调度器

Build Status Coverage Status Downloads GitHub release (latest by date) GitHub stars GitHub license

这使得在应用程序中安排 cronjob 变得简单、灵活和强大。你不需要在应用程序运行的每个服务器上设置多个 cronjob,只需要设置一个指向脚本的 cronjob,然后所有的任务都会在你的代码中安排。除此之外,它还提供了 CLI 工具来帮助你管理应该运行的任务,调试工具栏收集器等等。

通过 composer 安装

使用 composer install 使用包

> composer require daycry/cronjob

配置

运行命令

> php spark cronjob:publish

此命令将配置文件复制到你的应用命名空间。然后你可以根据需要调整它。默认文件将位于 app/Config/CronJob.php

> php spark migrate -all

此命令将在你的数据库中创建 rest 服务器表。

启动调度器

你只需要在你的 cronjob 中添加一行

> * * * * * php /path-to-your-project/spark cronjob:run >> /dev/null 2>&1

这将每分钟调用你的脚本一次。当调用 cronjob:run 时,任务将确定应该运行的正确任务并执行它们。

仪表板

你可以通过以下 URL 访问 Web 界面以查看作业的状态:https://example.com/cronjob 你必须在 CronJob.php 配置文件中配置用户名和密码。

    /*
    |--------------------------------------------------------------------------
    | Dashboard login
    |--------------------------------------------------------------------------
    */
    public string $username = 'admin';
    public string $password = 'admin';

自定义视图

转到 app\Config\CronJob.php ->views['dashboard'] 并将你的视图路径放在那里,例如:"Cronjob/dashboard" - 位于 app\Views\Cronjob\dashboard.php

/*
    |--------------------------------------------------------------------------
    | Views
    |--------------------------------------------------------------------------
    |
    | Notification of each task
    |
    */
    public array $views = [
        'login'                       => '\Daycry\CronJob\Views\login',
        'dashboard'                   => '\Daycry\CronJob\Views\dashboard',
        'layout'                      => '\Daycry\CronJob\Views\layout',
        'logs'                        => '\Daycry\CronJob\Views\logs'
    ];

CronJob List

定义计划

任务通过 app/Config/CronJob.php 配置文件配置,在 init() 方法内部。让我们从一个简单的例子开始

<?php namespace Daycry\CronJob\Config;

use CodeIgniter\Config\BaseConfig;
use Daycry\CronJob\Scheduler;

class CronJob extends BaseConfig
{
    /*
    |--------------------------------------------------------------------------
	| Cronjobs
	|--------------------------------------------------------------------------
    |
	| Register any tasks within this method for the application.
	| Called by the TaskRunner.
	|
	| @param Scheduler $schedule
	*/
    public function init(Scheduler $schedule)
    {
        $schedule->call(function() { 
            DemoContent::refresh();
        })->everyMonday();
    }
}

在这个例子中,我们使用闭包在每周一凌晨 12:00 刷新演示内容。闭包是处理此类快速函数的简单方法。你还可以执行服务器命令、执行你编写的自定义 CLI 命令、调用 URL,甚至触发你选择的事件。下面将详细介绍。

安排 CLI 命令

如果你编写了自己的 CLI 命令,你可以使用 command() 方法安排它们运行。

$schedule->command('demo:refresh --all');

唯一的参数是一个调用命令的字符串,包括选项或参数。

安排 Shell 命令

你可以使用 shell() 方法调用服务器并执行命令。

$schedule->shell('cp foo bar')->daily( '11:00 pm' );
$schedule->shell('cp foo bar')->daily( '23:00' );

只需提供要调用的命令和任何参数,它将使用 PHP 的 exec() 方法执行。

注意:许多共享服务器出于安全原因关闭了 exec 访问。如果你将在共享服务器上运行,请在使用此功能之前检查你是否可以使用 exec 命令。

安排事件

如果你想触发一个 事件,你可以使用 event() 方法来做到这一点,传递要触发的事件的名称。

$schedule->event('Foo')->hourly();

在后台运行命令

如果你想后台运行一个命令,你可以使用 runInBackground() 方法来做到这一点,这样命令就不会阻塞下一个调度器的执行。

注意

目前只有 命令 能够在后台运行

$schedule->command('slow-command')->runInBackground()->hourly();

这可以防止命令阻塞下一个调度器的执行。

在单台服务器上运行

如果您的调度程序在多台服务器上运行,您可以使用setRunType方法确定您的计划任务是在单台服务器还是多台服务器上执行。

注意

默认情况下,计划任务将在多台服务器上执行

$schedule->event('Foo')->setRunType('multiple')->hourly(); // Runs in all servers
$schedule->event('Foo')->setRunType('single')->hourly(); // Runs in one server

这通过在任务上锁定,确保它仅在首先获得它的第一台服务器上独占运行,从而防止任务在服务器之间重复。

调度URL调用

如果您需要定期ping一个URL,您可以使用url()方法通过cURL对您传入的URL执行简单的GET请求。如果您需要比简单的URL字符串提供的更多动态性,您可以使用闭包或命令。

$schedule->url('https://my-status-cloud.com?site=foo.com')->everyFiveMinutes();

频率选项

有几种方法可以指定任务被调用的频率。

这些方法可以组合起来创建更微妙的计时。

$schdule->command('foo)
    ->weekdays()
    ->hourly()
    ->environments('development');

任务命名

您可以为任务命名,以便稍后可以轻松引用,例如通过CLI使用named()方法。

$schedule->command('foo')->hourly()->named('foo-task');

CLI命令

包中包含一些可以从CLI运行的命令,这些命令可以在特定时间cron作业出现问题时提供一些紧急帮助。

所有命令都是通过CodeIgniter的spark CLI工具运行的。

> php spark cronjob:list
> php spark cronjob:run
> php spark cronjob:run -testTime "2021-01-01 09:45:00"

或者,如果您愿意,可以通过传递以逗号分隔的名称来运行一个或多个特定作业。

> php spark cronjob:run -only "foo-task,foo-task1"

可用命令

cronjob:list

> php spark cronjob:list

这将列出在项目中定义的所有可用任务,包括它们的类型和下一次计划运行的时间。

+--------------------------+---------+-------------+---------------------+---------------------+
| Name                     | Type    | Expression  | Last Run            | Next Run            |
+--------------------------+---------+-------------+---------------------+---------------------+
| job1                     | command | 08 10 * * * | --                  | 2022-11-04 10:08:00 |
| Job2                     | command | 0 0 * * *   | 2022-10-28 13:23:21 | 2022-11-05 00:00:00 |
+--------------------------+---------+-------------+---------------------+---------------------+

cronjob:disable

> php spark cronjob:disable 

将手动禁用任务运行器,直到您再次启用它。将在{WRITEPATH}/cronJob写入文件,因此您需要确保该目录可写。默认的CodeIgniter权限已经具有可写权限的WRITEABLE路径。您通常不需要为此进行任何更改。

cronjob:enable

> php spark cronjob:enable

将启用之前禁用的任务运行器,允许所有任务恢复运行。

cronjob:run

> php spark cronjob:run

这是任务系统的主要入口点。它应该在服务器上每分钟由cron任务调用一次,以便能够有效地运行所有计划任务。您通常不会手动运行此命令。

通知

如果您想通过电子邮件接收通知,只需配置Codeigniter电子邮件库即可。