5

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

我有 2 个主要问题希望得到您的建议:

问题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.

问题2:应用程序的接口

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

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

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


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

笔记

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

谢谢。

4

2 回答 2

4

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

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

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

于 2012-05-10T23:49:38.907 回答
0

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

比以 root 身份登录服务器、编辑 crontab、记住模式并保存要容易得多。另外,您不会被称为“crontab 家伙”,每个人都想在 crontab 中添加一些东西时会来找他。

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

于 2012-05-22T15:52:20.990 回答