daycry / cronjob
Codeigniter 4 的 Cronjob 库
Requires
- php: >=8.0
- dragonmantank/cron-expression: ^3.3
Requires (Dev)
- codeigniter4/devkit: ^0.1.0
- codeigniter4/framework: ^4
- phpunit/phpunit: ^9.1
- rector/rector: 0.14.2
- dev-master
- v2.2.29
- v2.2.28
- v2.2.27
- v2.2.26
- v2.2.25
- v2.2.24
- v2.2.23
- v2.2.22
- v2.2.21
- v2.2.20
- v2.2.19
- v2.2.18
- v2.2.17
- v2.2.16
- v2.2.15
- v2.2.14
- V2.2.13
- V2.2.12
- V2.2.11
- V2.2.10
- V2.2.9
- V2.2.8
- V2.2.7
- V2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-daycry-patch-1
This package is auto-updated.
Last update: 2024-09-13 10:53:54 UTC
README
注意
如果你想要使用队列系统,可以使用 queues vendor
CodeIgniter 任务调度器
这使得在应用程序中安排 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' ];
定义计划
任务通过 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电子邮件库即可。