使用PHP创建多个cron作业

使用PHP创建多个cron作业,php,dynamic,cron,jobs,Php,Dynamic,Cron,Jobs,我需要一种方法来创建动态的一次性cron作业,以便在不同的时间执行任务。理想情况下,我希望使用PHP实现这一点,这样当用户完成某个操作时,就会创建cron作业,并根据用户完成所述操作的时间来安排该时间。在任何时候,都可能有多个cron作业在不同时间同时调度。完成后还需要删除这些cron作业 我试着四处寻找合适的东西,但是没有找到任何我需要的东西。如果有人能给我指出正确的方向,我将不胜感激 Cheers要实现此功能,您需要有一个始终运行的守护进程来检查并启动这些动态作业。安装有点复杂,但是如果您已

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

我试着四处寻找合适的东西,但是没有找到任何我需要的东西。如果有人能给我指出正确的方向,我将不胜感激


Cheers

要实现此功能,您需要有一个始终运行的守护进程来检查并启动这些动态作业。安装有点复杂,但是如果您已经准备好进行这样的工作,您可以使用project PHP Resque调度器

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

一个可能的解决方案:

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

    只需创建一个调用CronJobManager.php的常规守护程序

  • 在数据库中创建cronjob表

    cron作业表应该包含以下基本字段:path(到php文件)、run_time(datetime)、last run(datetime)和type(如您所解释的,如果您希望一些cron作业自行删除,则类似自杀)

  • 将CronJobManager.php与cronjob表连接起来

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

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

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

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

  • 这是一个一般的想法,当然您必须用cron作业状态(空闲、运行、停止等)来扩展它

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

    即:Cron作业类,一旦它执行了它必须执行的操作,它将检查它的类型(如数据库中定义的)。如果是“自杀”,则会删除数据库行

    更新


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

    谢谢您的帖子。不幸的是,我需要将cron作业执行到精确的秒,而不是1分钟的间隔。