mwstake / mediawiki-component-runjobstrigger
提供基于 MediaWiki 的 `maintenance/runJobs.php` 的后台任务基础设施
Requires
- composer/installers: ~1.0|~2
- mwstake/mediawiki-componentloader: ~1
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 39.0.0
- mediawiki/minus-x: 1.1.1
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: ^8.5
README
MediaWiki 的 RunJobsTrigger
提供基于 MediaWiki 的 maintenance/runJobs.php
的后台任务执行基础设施。
此代码旨在在 MediaWiki 框架中使用。请勿在 MediaWiki 之外尝试使用它。
先决条件
必须通过服务器端进程(例如,在 Linux 上的 cronjob 或 Windows 上的计划任务)定期运行 MediaWiki 的 maintenance/runJobs.php
脚本。
该任务的频率决定了处理器可以调用的最小频率。建议至少每 15 分钟调用一次 maintenance/runJobs.php
。
在 MediaWiki 扩展中使用
将 "mwstake/mediawiki-component-runjobstrigger": "~2.0"
添加到您的 composer.json
文件的 require
部分。
从 2.0 版本开始,需要显式初始化。可以通过以下方式实现:
- 或者将
"callback": "mwsInitComponents"
添加到您的extension.json
/skin.json
- 或者调用
mwsInitComponents();
在您扩展/skins自定义callback
方法中
另请参阅 mwstake/mediawiki-componentloader
。
实现处理器
创建一个实现 MWStake\MediaWiki\Component\RunJobsTrigger\IHandler
的类。为了方便,您可能希望实现抽象基类 MWStake\MediaWiki\Component\RunJobsTrigger\Handler
的子类。
在 getInterval
方法中,您可以返回任何实现 MWStake\MediaWiki\Component\RunJobsTrigger\Interval
的对象。有一些预定义的间隔可用
MWStake\MediaWiki\Component\RunJobsTrigger\Interval\OnceADay
MWStake\MediaWiki\Component\RunJobsTrigger\Interval\OnceAWeek
MWStake\MediaWiki\Component\RunJobsTrigger\Interval\OnceEveryHour
MWStake\MediaWiki\Component\RunJobsTrigger\Interval\TwiceADay
注册处理器
有两种方式可以注册处理器
- 使用
mwsgRunJobsTriggerHandlerRegistry
GlobalVars 配置 - 使用钩子
MWStakeRunJobsTriggerRegisterHandlers
在两种情况下,都必须提供 ObjectFactory 规范。
示例 1: GlobalVars
$GLOBALS['mwsgRunJobsTriggerHandlerRegistry']['my-own-handler'] = [ 'class' => '\\MediaWiki\Extension\\MyExt\\MyHandler', 'services' => [ 'MainConfig' ] ];
示例 2: Hookhandler
$GLOBALS['wgHooks']['MWStakeRunJobsTriggerRegisterHandlers'][] = function( &$handlers ) { $handlers["my-own-handler"] = [ 'class' => '\\MediaWiki\Extension\\MyExt\\MyHandler', 'services' => [ 'MainConfig' ] ]; return true; };
配置
mwsgRunJobsTriggerRunnerWorkingDir
: 在执行过程中存储数据的位置。默认为操作系统的临时目录。mwsgRunJobsTriggerOptions
: 特定处理器的定时选项。mwsgRunJobsTriggerHandlerRegistry
: 添加您自己的触发处理器。
配置示例
使用 MediaWiki 的临时目录在执行过程中存储数据
假设管理员希望确保任何临时文件都创建在 MediaWiki 的临时目录中而不是其他地方。他们可以通过将以下内容添加到他们的 LocalSettings.php
来做到这一点
$GLOBALS['mwsgRunJobsTriggerRunnerWorkingDir'] = $wgTmpDirectory;
更改定时选项
维基管理员可以在他们的 LocalSettings.php
中添加以下内容,以便将 OnceAWeek
任务在星期五而不是星期日(默认)运行
$GLOBALS['mwsgRunJobsTriggerOptions']['*']['once-a-week-day'] = 'friday';
调试
可以通过添加以下内容来启用调试日志:
$GLOBALS['wgDebugLogGroups']['runjobs-trigger-runner'] = "/tmp/runjobs-trigger-runner.log";
到您的 LocalSettings.php
文件