计划任务

计划任务让你有规律地执行任务(每小时,每周,…),例如:

  • 创建并发送自定义报告或摘要
  • 与其他系统同步用户和网站
  • 清除任何缓存

在插件中添加计划任务

方法将计划任务添加到插件中控制台

$ ./console generate:定时任务

该命令将要求您输入插件的名称并创建一个插件/编写MyPlugin / Tasks.php文件。这个文件包含了一些例子来帮助你入门:

类任务扩展\Piwik\Plugin\Tasks{公共函数调度(){$this->hour ('myTask');// myTask()每小时执行一次$this->daily('myTask');$this->weekly('myTask');// myTask()将每周执行一次$this->monthly('myTask');// myTask()将每月执行一次//传递一个参数给任务$this->每周('myTaskWithParam', 'anystring');//指定不同的优先级$this->monthly('myTask', null, self::LOWEST_PRIORITY);$this->monthly('myTaskWithParam', 'anystring', self::HIGH_PRIORITY);public function myTaskWithParam($param) {// do something}}

简单的例子

正如你在生成的模板中看到的,通过注册一个代表实际任务的方法,你可以每小时、每天、每周和每月执行任务:

公共函数schedule(){//注册方法remindMeToLogIn每天执行一次$this->daily('remindMeToLogIn');}公共函数remindMeToLogIn() {$mail = new \Piwik\ mail ();邮件- >遭受美元(“me@example.com”);邮件- > setSubject(检查数据);$mail->setBodyText('登录到您的Matomo(以前的Piwik)实例并检查您的统计数据!');邮件- >发送();}

这个例子每天向您发送一封电子邮件,提醒您每天登录您的Matomo。Matomo平台确保每天准确地执行一次remindMeToLogIn方法。

将参数传递给任务

有时您希望将参数传递给任务方法。如果你想为每个用户或每个网站注册一个任务,这是很有用的。可以通过在注册要执行的方法时指定第二个参数来实现这一点。

public function schedule() {foreach (\Piwik\Site::getSites() as $ Site){//为每个站点创建一个任务,并将每个站点的URL传递给任务$this->hour ('pingSite', $ Site ['main_url']);}}公共函数pingSite($siteMainUrl) {file_get_contents($siteMainUrl);}

重试失败的任务

默认情况下,由于异常而失败的计划任务将不会再次运行,直到下一次正常执行时间。如果您的任务以适合重试的方式失败,则可以抛出Piwik \ SchedulerRetryableException.任务调度器将重新调度失败的任何任务RetryableException在一小时内再次尝试该任务,最多重试三次。

公共函数myTask() {try {// do something} catch (Exception $e) {if ($e->getMessage() == "某些API:请求太多,请稍后重试"){抛出新的RetryableException($e->getMessage())}其他{抛出$e;}}}

测试计划任务

使用实例手动执行所有定时任务。

$ ./console核心:run-scheduled-tasks

但这有一个问题:Matomo确保计划任务每小时或每天只执行一次。这意味着您不能简单地一次又一次地运行命令,因为您必须等待下一个小时或下一天。

为了解决这个问题,——力选项将强制执行所有任务,即使是那些此时不应运行的任务。

$ ./console core:run-scheduled-tasks——force

请记住,手动测试计划任务只是第一步:添加单元或集成测试是避免倒退的最好方法。

哪些任务被注册,我的任务的下一次执行时间是什么时候?

TasksTimetable插件可以为你回答这个问题。只需安装和激活插件与点击>市场>获得新功能.它将在下面添加一个新的管理菜单项设置命名计划任务

阅读更多

有关计划任务的更多信息,请参阅任务类引用

Baidu