构建一个cron作业调度程序

时间:2012-05-10 07:40:25

标签: php zend-framework cron

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

我有两个主要问题,我想要你的建议:

问题1:应用程序本身的设置

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

  1. 第一种方法是创建一个文件夹scripts并在其中创建一个公共引导程序文件,我只加载我需要的资源。然后,对于每个任务,我将创建一个单独的脚本,并在每个脚本中包含引导程序文件。最后,我将在crontab文件中为每个脚本添加一个cron任务,任务类似于***** php /path/to/scripts/folder/cronScript_1.php

  2. 其次将cron作业视为正常请求(无特殊引导)。在crontab文件中为每个脚本添加一个cron任务,任务类似于***** curl http://www.mydomain.com/module/controller/action

  3. 问题2:应用程序的界面

    添加cron作业也可以通过两种方式完成:

    1. 对于每个任务,crontab文件中都会有一个条目。当我想添加新任务时,我必须通过cPanel或任何其他方式来编辑crontab(可能不可用)。

    2. 将任务存储在数据库中,并提供用于与数据库交互的UI(网格以添加少量任务和配置)。之后,在每分钟运行的crontab文件中只写入1个cron作业。此作业将从数据库中选择所有作业,并检查是否存在应立即运行的作业(任务的存储时间将与服务器的当前时间进行比较)。


    3. 您认为哪种方式更适合每个部分实施?是否有一个现成的解决方案,总的来说更好?

      注意

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

      感谢。

2 个答案:

答案 0 :(得分:4)

只是我的意见,但我个人都喜欢1& 2取决于您的脚本打算完成什么。例如,我们主要使用所有cron条目执行1,因为它很容易查看/ etc / crontab,并且可以一目了然地查看应该运行的内容。但是,有时需要每分钟调用一个脚本,因为脚本中的逻辑将确定在该分钟内运行的内容。 (即数百万用户需要不断处理,因此您可以得到用户在每小时内做什么的公式)

另请参阅Gearman(http://gearman.org/)。它使您能够在一台计算机上运行cron脚本,然后将作业切片为较小的位,并将这些位移植到其他服务器进行处理。您可以完全控制您想要采用它的地图/缩小方面的距离。它极大地帮助了我们,并允许我们每分钟处理数千个算法脚本。如果我们需要更多功率,我们只需启动更多“主力”节点,Gearman会自动检测并利用它们。

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

答案 1 :(得分:0)

对于问题2:应用程序的接口我使用了方法1和2。我强烈推荐第二个。创建数据库表和构建UI需要更多的前期工作。从长远来看,它可以更轻松地添加新的作业。我为我现在的公司构建了用户界面,非常容易使用,非技术人员(会计师,仓库主管)能够进入并创造就业机会。

比以root身份登录服务器,编辑crontab,记住模式和保存要容易得多。另外,每当他们想要向crontab添加内容时,每个人都会被称为“crontab人”。

至于设置应用程序本身,我会让cron调用一个脚本并让该脚本运行其余的脚本。这样你只需要1个cron条目。请注意,如果运行作业需要很长时间,则需要确保在没有其他实例运行的情况下脚本才会开始运行。否则你最终可能会跑两次同样的工作。