使用PHP创建多个cron作业

时间:2014-04-18 05:22:09

标签: php dynamic cron jobs

我需要一种方法来创建动态的,一次性的cron作业,以便在不同的时间执行任务。理想情况下,我希望使用PHP实现此目的,以便在用户完成某个操作时,创建cron作业并安排一段时间,该时间是根据用户完成所述操作的时间计算的。在任何时候,可能会有不同时间安排多个cron作业。这些cron作业也需要在完成时删除。

我试图寻找合适的东西,但是没有遇到任何可行的方法。如果有人能指出我正确的方向,那将非常感激。

干杯

2 个答案:

答案 0 :(得分:1)

可能的解决方案:

  1. 设置每秒调用CronJobManager.php的Cron作业。

    只需制作一个调用CronJobManager.php的常规守护进程。

  2. 在数据库中创建一个cronjob表

    cron作业表应包含以下基本字段:路径(到php文件),run_time(日期时间),最后一次运行(日期时间)并键入(如自杀,如果你解释你想要一些cron jobs删除自己)

  3. 将CronJobManager.php与cronjob表连接

    每次运行CronJobManager.php(即每秒),都会加载cron作业。然后,将“now”的时间与每个cron作业的run_time进行比较,您将获得要运行的cron作业。

    例如,如果cron作业“foo”run_time设置为18/04/2014 22:02:01,CronJobManager将在到达该时刻时运行它。

    请注意,如果Cron作业执行时间需要很长时间,它们会被延迟,最终会丢失一两秒钟。

    现在,对于需要执行的每个cron作业,您将执行该路径中指示的该cron作业的相关php文件。

  4. 这是一个普遍的想法,当然你必须使用例如cron作业状态(空闲,运行,停止等)来扩展它。

    要删除cron作业,您可以在cron作业对象中实现此功能。

    即:Cron Job类,一旦执行了它必须执行的操作,它将检查其类型(如数据库中所定义)。如果它是'自杀',那么它将删除数据库行。

    <强>更新

    我更新了答案,但我想注意一些事情。如果你需要的是一次运行几个cron作业,在特定的第二个0延迟,那么你需要一个运行特定文件的php中的每个任务的cron作业。

答案 1 :(得分:0)

要实现此功能,您需要拥有一个始终运行的守护程序来检查这些动态作业并启动它们。设置很复杂,但是如果你已经准备好了这样的努力,你可以使用项目PHP Resque Scheduler。

https://github.com/chrisboulton/php-resque-scheduler

启动一个始终运行的守护程序,然后您可以将作业添加到动态队列中,以便在将来的任何指定时间执行。我想你会发现这适合你想做的一切。