oat-sa / extension-tao-scheduler
TAO作业调度器
v3.0.3
2023-08-10 16:14 UTC
Requires
- hutnikau/job-scheduler: ~0.6.1
- oat-sa/generis: >=15.22
- oat-sa/oatbox-extension-installer: ~1.1||dev-master
- oat-sa/tao-core: >=50.24.6
- dev-master
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.3.0
- v2.2.0
- v2.1.2
- v2.1.1
- v2.0.1
- v2.0.0
- v1.1.0
- v1.0.1
- v0.9.0
- v0.8.2
- v0.8.1
- v0.7.0
- v0.5.2
- v0.5.1
- v0.3.1
- dev-feature/sonarqube-integration
- dev-develop
- dev-fix/update-autoRelease-action-with-bot-user
- dev-feature/AUT-2995
- dev-feature/poc-php80-compatibility
- dev-feature/configurable_jobs
- dev-feature/declarative_jobs
- dev-remove-jenkinsfile
- dev-fix/bumpVersion
- dev-feature/CI_checks_test
- dev-experiment/changelog
This package is auto-updated.
Last update: 2024-09-16 16:13:52 UTC
README
使用RRULE标准来配置每个作业的时间和重复规则。
安装
$ composer require oat-sa/extension-tao-scheduler
使用方法
附加作业
use oat\taoScheduler\model\scheduler\SchedulerServiceInterface;
$schedulerService = $this->getServiceManager()->get(SchedulerServiceInterface::SERVICE_ID);
$schedulerService->attach(
'FREQ=MONTHLY;COUNT=5', //Reccurrence rule (repeat monthly, 5 times)
new \DateTime('2017-12-12 20:00:00'), //Start date (time of first execution)
['taoExtension/ServiceName', 'methodName'] //Callback to be called.
);
也可以使用cron表示法
$schedulerService->attach(
'* * * * *', //Reccurrence rule (repeat minutely)
new \DateTime('2017-12-12 20:00:00'), //Start date (time of first execution)
['taoExtension/ServiceName', 'methodName'] //Callback to be called.
);
注意:
除了函数外,您可以使用任何可调用类型的实例作为回调。如果使用对象([$object, 'method')),请确保对象是
PhpSerializable
的实例。
可以使用oat\oatbox\action\Action
实例的类名作为回调
分离作业
use oat\taoScheduler\model\scheduler\SchedulerServiceInterface;
$schedulerService = $this->getServiceManager()->get(SchedulerServiceInterface::SERVICE_ID);
$schedulerService->detach(
'FREQ=MONTHLY;COUNT=5', //Reccurrence rule (repeat monthly, 5 times)
new \DateTime('2017-12-12 20:00:00'), //Start date (time of first execution)
['taoExtension/ServiceName', 'methodName'] //Callback to be called.
);
传递给detach
函数的所有参数应与现有作业中的参数相同。
运行JobRunner
sudo -u www-data php index.php '\oat\taoScheduler\scripts\JobRunner' 1518006301 PT10S
- 第一个参数是调度器应该开始查找计划任务的日期戳。在此时间之前的所有任务都将被忽略。
注意:
即使计划任务的开始日期晚于提供给作业运行器的日期,任务也可能被执行,因为它们可能是重复的,而开始日期只是第一次发生的时间。
如果省略此参数或小于0,则从存储中获取起始时间(最后查找计划作业的时间或最后作业运行器迭代的时间)。
如果没有最后迭代时间在存储中,则使用当前时间戳。
- 第二个参数是作业运行器迭代之间的时间。默认值为60秒。此时间可能比配置的更长,因为找到的任务的执行可能需要一些时间。
发现要运行的任务
sudo -u www-data php index.php '\oat\taoScheduler\scripts\tools\SchedulerHelper' show 1518097355 1518100955
从作业存储中删除过期的作业(在给定日期之后不再执行的作业)
sudo php index.php '\oat\taoScheduler\scripts\tools\SchedulerHelper' removeExpiredJobs false 1519890884
- 第一个参数是dryrun模式。默认值为
false
。 - 第二个参数是辅助程序将尝试找到过期作业的时间(包括给定时间)。如果未提供参数,则使用作业运行器的最后启动时间。
要使用任务队列运行任务,您可以使用\oat\taoTaskQueue\scripts\tools\AddTaskToQueue
操作。
注意:
taoScheduler不需要taoTaskQueue扩展。请确保已安装任务队列。
use oat\taoTaskQueue\scripts\tools\AddTaskToQueue; $schedulerService->attach( '*/5 * * * *', new DateTime('now', new \DateTimeZone('utc')), AddTaskToQueue::class, [ActionClassToBeRun::class, 'param 1', 'param2'] );
警告
- 如果调度器将在多服务器环境中运行,请使用常见的rds存储配置JobRunner服务。
- 请勿安排执行需要大量资源或耗时较长的任务。所有消耗时间/资源的任务应在任务队列中创建适当的任务。理想情况下,计划任务应该除了向任务队列添加任务外不做任何事情。
- 如果发生次数不受限制,请使用cron语法。
- iCalendar语法更灵活,但在重复次数较多或无限的情况下,可能会出现性能问题。默认重复次数限制为732。更多信息:https://github.com/simshaun/recurr