开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

使用 Zend Server 进行部署(第 2 部分,共 8 部分)

这是八篇文章中的第二篇,详细介绍了部署到ZendServer的技巧。该系列的上一篇文章详细介绍了AWS市场上的ZendServer入门以及使用zf-deploy创建ZPK包以部署到ZendServer。

今天,我正在研究如何使用ZendServer的作业队列创建计划/重复作业;将其视为应用程序级cronjobs。

技巧2:重复性工作

我需要在服务器上定义一些重复作业。过去,我为此使用过cron,但最近我的想法略有改变:如果我使用cron,我必须假设我在类unix系统上运行,并且具有某种系统访问权限到服务器。如果我有多台服务器在运行,这意味着确保它们在每台服务器上都已安装。能够在应用程序级别定义这些作业似乎更好。

由于ZendServer带有作业队列,我决定尝试使用它来安排重复作业。然而,这并不是非常直观。用户界面允许您定义计划的作业……但只提供每分钟、每小时、每天、每周和每月的选项,不允许您指定确切的时间间隔(例如,每天20:00)。

然而,PHPAPI使这一切变得简单。我可以按如下方式创建工作:

$queue = new ZendJobQueue();
$queue->createHttpJob('/jobs/github-feed.php', [], [
    'name'       => 'github-feed',
    'persistent' => false,
    'schedule'   => '5,20,35,40 * * * *',
]);

本质上,您为要执行的脚本提供一个URL(作业队列通过访问服务器上的一个URL来“运行”一个作业),并以crontab格式提供一个计划。我也喜欢给我的作业命名,因为它允许我在UI中搜索它们,还可以在UI中的规则和日志之间建立链接。将它们标记为持久确保如果作业成功,它将从事件列表中删除。

问题是,你在哪里定义这个?我决定在mypost_activate.php部署脚本中执行此操作。但是,这会引发两个新问题:

  • 规则不仅需要脚本的路径,还需要方案和主机。您可以省略它们,但前提是脚本可以通过$_SERVER解析它们……它不能在部署期间到期。
  • 每个部署都会添加作业您定义……但这不会覆盖或删除您在之前部署中添加的作业。

我按如下方式解决了这些问题:

$server = 'http://mwop.net';

// Remove previously scheduled jobs:
$queue = new ZendJobQueue();
foreach ($queue->getSchedulingRules() as $job) {
    if (0 !== strpos($job['script'], $server)) {
        // not one we're interested in
        continue;
    }

    // Remove previously scheduled job
    $queue->deleteSchedulingRule($job['id']);
}

$queue->createHttpJob($server . '/jobs/github-feed.php', [], [
    'name'       => 'github-feed',
    'persistent' => false,
    'schedule'   => '5,20,35,40 * * * *',
]);

所以,总结一下:

  • 使用名称定义规则。
  • 使用计划选项定义重复规则。
  • 在部署脚本中定义重复规则,在post_activate期间。
  • 在定义它们之前删除部署脚本中先前定义的规则。

下次……

本系列的下一个技巧是一个简短的技巧,非常适合在美国劳动节周末过后,详细介绍了我在设置部署任务时从技巧1中艰难学到的一些东西。

系列其他文章

  • 技巧1:zf-deploy
  • 技巧3:chmod
  • 技巧4:保护作业脚本
  • 技巧5:设置作业status
  • 技巧6:页面缓存
  • 技巧7:zs-client
  • 技巧8:自动化
未经允许不得转载:我爱分享网 » 使用 Zend Server 进行部署(第 2 部分,共 8 部分)

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏