php - 构建 cron 作业调度程序

标签 php zend-framework cron

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

3年前关闭。




Improve this question




目前我正在尝试构建一个良好的调度程序系统作为在我的系统上设置和编辑 cron 作业的界面。我的系统是在 Linux 服务器上使用 Zend 框架 1.11.11 构建的。

我有两个主要问题需要您的建议:

问题一:应用本身的设置

我有两种运行 cron 作业的方法:

  • 第一种方法是创建一个文件夹scripts并在其中创建一个通用 Bootstrap 文件,我将只加载我需要的资源。然后,对于每个任务,我将创建一个单独的脚本,并在每个脚本中包含 Bootstrap 文件。最后,我将在 crontab 文件中为这些脚本中的每一个添加一个 cron 任务,该任务将类似于 ***** php /path/to/scripts/folder/cronScript_1.php .
  • 其次,将 cron 作业视为正常请求(没有特殊的 Bootstrap )。在 crontab 文件中为这些脚本中的每一个添加一个 cron 任务,该任务将类似于 ***** curl http://www.mydomain.com/module/controller/action .

  • 问题二:应用接口(interface)

    添加 cron 作业也可以通过两种方式完成:
  • 对于每个任务,crontab 文件中都会有一个条目。当我想添加一个新任务时,我必须通过 cPanel 或任何其他方式来编辑 crontab(可能不可用)。
  • 将任务存储在数据库中并提供用于与数据库交互的 UI(网格以添加少量任务和配置)。之后,在每分钟运行的 crontab 文件中只写入 1 个 cron 作业。此作业将从数据库中选择所有作业并检查是否有应立即运行的作业(将存储任务的时间并与服务器的当前时间进行比较)。


  • 您认为每个部分采用哪种方式更好?有没有现成的解决方案,一般来说更好?

    备注

    我遇到了Quartz将寻找现成的解决方案。这是我正在寻找的东西还是完全不同的东西?

    谢谢。

    最佳答案

    只是我的意见,但我个人喜欢 1 和 2,这取决于您的脚本打算完成什么。例如,我们通常对所有 cron 条目执行 1,因为查看/etc/crontab 并一目了然地看到事情应该何时运行变得非常容易。但是,有时需要每分钟调用一次脚本,因为脚本中的逻辑会确定在那一分钟要运行的内容。 (即需要持续处理的数百万用户,因此您有一个公式来说明用户在一小时内的每一分钟要做的事情)

    还可以看看 Gearman (http://gearman.org/)。它使您能够在一台机器上运行 cron 脚本,然后将作业分成更小的位,并将这些位分配给其他服务器进行处理。您可以完全控制要在其 map /减少方面进行多远。它极大地帮助了我们,并允许我们每分钟处理数千个算法脚本。如果我们需要更多功率,我们只需启动更多“主力”节点,Gearman 就会自动检测并利用它们。

    我们目前在命令行上做所有事情,不使用 cPanel、Plesk 等,所以我无法证明从这些后端之一编辑 crontab 是什么感觉。您可能需要考虑让一个人成为您团队中的 crontab“看门人”。将预期的 crontab 条目放入项目代码中不可通过 Web 访问的文件夹中。然后每当对文件的更改被推送到版本控制时,该人应该通过 SSH 连接到适当的机器并进行更改。我不确定您的内部结构,所以这可能可行,也可能不可行,但对于开发人员来说,能够看到 crontab 执行脚本的方式是个好主意。

    关于php - 构建 cron 作业调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529459/

    相关文章:

    laravel-5 - 如何使用计划 :run manually in Laravel 5 (October CMS actually) 启动 cron 作业

    magento - 在 magento 的多个实例上设置 Cron 作业

    php - mysql 查询 information_schema.GLOBAL_VARIABLES 以获得全文支持

    php - 删除编号数组中的重复项

    php - 有趣的 PHP 语法 : an 'implied if' ?

    zend-framework - 限制 Doctrine FindAll 方法的行

    php - PHP 中 return 、 echo 和 print 关键字之间的区别

    php - Wordpress,博客页面不显示博客

    php - 具有无限嵌套的树评论系统的算法?

    python - Django:将 key 放入 crontab 文件