nr / processcronjobs
管理CronJobs的执行
dev-main
2024-07-11 15:14 UTC
Requires
- hari/pw-module: ~1.0
README
功能
该模块提供可以注册cronjobs的路径。它列出所有已注册的cronjobs,可以手动执行单个cronjobs。显示最后执行时间、最后状态,以及在出错时显示最后错误信息。
功能特性
- 所有注册的CronJobs的清晰概述
- 设置定时(onInit或onReady)和延迟(LazyCron)简单
- 执行CronJobs的单独路径(端点)。为选定的CronJobs配置秘密路径段和额外的路径段(命名空间)。
- 显示最后执行时间和任何错误信息
安装
- 将此模块的文件复制到 /site/modules/ProcessCronJobs/
- 在管理员界面:模块 > 刷新。安装 ProcessCronJobs。
- 转到设置 > CronJobs
- 将示例模块(
modules/ProcessCronJobs/example/ProcessCronJobsRegistration.module.example
)复制并安装到__constructor()
方法中,以注册您的CronJobs。您也可以使用任何其他__constructor()
方法。建议尽早注册CronJobs,以便它们也可以在onInit上执行。 - 设置真实cron,以调用ProcessCronJobs提供的端点。
- 在Unix控制台中输入
crontab -e
- 添加以下行并保存文件:
* * * * * curl --silent "https://example.com/cron/"
了解有关设置CronJobs的更多信息(维基百科)。
- 在Unix控制台中输入
通过composer安装
- 在网站根目录中执行以下命令。
composer require nr/processcronjobs
注册CronJob
简单
注册CronJob的简单示例。
wire()->addHookBefore('ProcessCronJobs::register', function(HookEvent $event){ /** @var ProcessCronJobs $processCronJobs */ $processCronJobs = $event->object; $processCronJobs->add( 'SuperSimpleCronJobOnDemand', function(CronJob $cron){ echo "Hello Cron"; }, ); });
延迟
此CronJob应在初始化时每天运行一次。
wire()->addHookBefore('ProcessCronJobs::register', function(HookEvent $event){ /** @var ProcessCronJobs $processCronJobs */ $processCronJobs = $event->object; $processCronJobs->add( 'MyFirstCronJobEveryDay', function(CronJob $cron){ echo "What a beautiful day"; }, [ 'lazyCron' => 'LazyCron::everyDay', 'timing' => CronJob::timingInit, ] ); });
长时间运行
此CronJob运行时间非常长,并由“真实”CronJob直接调用,以免阻塞其他CronJob。此CronJob的端点是https://example.com/cron/longrunning/或https://example.com/cron/###your_secret###/longrunning/。
具有命名空间(自己的路径段)的CronJobs不能使用LazyCron进行延迟,因为LazyCron只能由单个请求启动。LazyCron创建一个锁文件,从而阻止并行调用的执行。
wire()->addHookBefore('ProcessCronJobs::register', function(HookEvent $event){ /** @var ProcessCronJobs $processCronJobs */ $processCronJobs = $event->object; $processCronJobs->add( 'SuperLongRunningSpecialCronJob', function(CronJob $cron){ echo "I have so much work to do"; }, [ 'timing' => CronJob::timingInit, 'ns' => 'longrunning' ] ); });
流程视图
配置
模块
> 配置
> ProcessCronJobs
您将在模块设置中找到以下配置选项
- 触发路径,即触发CronJob处理的路径,可以在此进行调整(默认:cron/)。
- 可以创建一个秘密路径段,该路径段必须附加到触发路径,以便启动处理。
- 可以停止自动处理(状态)。
- 可以清空ProcessCronJobs的缓存。例如,最后调用时间、最后调用状态以及可能出现的错误信息都存储在缓存中。