【问题标题】:LAMP: How to Implement Scheduling?LAMP:如何实现调度?
【发布时间】:2011-07-27 08:12:51
【问题描述】:

我的应用程序的用户需要能够安排特定任务在特定时间运行(例如,仅一次、每分钟、每小时等)。我的计划是让 cron 每分钟运行一个脚本来检查应用程序,看看它是否有要执行的任务。如果是,则执行任务。

问题:

  1. 每分钟运行一次 cron 是个好主意吗?
  2. 如何像 cron 那样在数据库中建模时间间隔(例如,每分钟、每小时的第 5 分钟等)?

我正在使用 LAMP。

【问题讨论】:

标签: mysql database cron database-design


【解决方案1】:

或者,与其做任何实际工作,不如简单地为用户创建一个界面,然后在 cron 中发布条目!与其让 cron 每分钟都给你打电话,不如让它按照用户的指示调用脚本。当他们添加或更改作业时,重写 crontab。

没什么大不了的。

在 unix 中,cron 允许每个用户(即 unix 登录)拥有自己的 crontab,因此您可以拥有一个专用于您的应用程序,而不必为此使用根 crontab。

【讨论】:

  • 我想这是可能的。这意味着每个帐户用户都需要有一个关联的 unix 用户。那可能有点复杂???
  • 不,我的意思只是你有一个用户与你的应用程序相关联,并使用该 crontab ——没有理由为每个应用程序用户都有一个 unix 用户。
  • 我认为这个想法可能是可行的。我再考虑一下。你做过这样的事吗?
  • 不,我使用的是 Java,并编写了自己的调度程序。这是一项工作,而且 cron 确实不适合它。但对你来说,这很简单。假设您可以将用户想要运行的作业转换为 shell 脚本,您可以将作业设置(类型、输入数据、计划等)捕获到数据库中的内部作业表中,然后使用该表创建一个脚本(可能以主键命名),然后简单地转储 crontab,然后使用 'crontab -u' 重新加载它。
  • 我刚刚意识到这可能很难实现。我需要提供让用户修改这些任务的能力(例如更改频率等)。此外,需要为每个任务指定开始和停止日期; cron 不支持,对吧?我想我需要一个数据库解决方案,而不是试图操纵 cron 文件。你怎么看?
【解决方案2】:

您的意思是您有一系列用户定义的作业需要在用户定义的时间间隔内执行,并且您想让 cron 促进这些作业的处理?如果是这样,您需要一个至少包含 2 个字段的数据库: 工作, 经常

其中 OFTEN 是他们希望作业运行的频率,使用类似于 CRON 的语法。

然后您需要编写一个脚本(使用 python、ruby 或一些类似的语言)来解析该数据。该脚本将通过您的实际 cron 每 1 分钟运行一次。

看看this StackOverflow questionthis StackOverflow question,了解如何通过python解析crontab数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多