首页 > 解决方案 > 在php中运行计划任务

问题描述

我有一张表,其中包含运行广告系列的所有信息。信息包括,检查活动的时间间隔(10 分钟、15 分钟等)和其他信息,以检查它是否符合特定要求,以运行活动。

目前,我打算做的是:

我需要建议,无论它是否是正确的解决方案,或者是否有人有更好和有效的解决方案?

标签: phpcron

解决方案


这是一个不错的起点...

如果是时候检查广告系列...

请记住,有时 cron 进程需要比预期更长的时间、卡住或您的系统在中间崩溃。理想情况下,您的流程将跟踪 a.) 它正在做什么,以及 b.) 它何时执行。并且能够解决诸如跳过或卡住的处理问题。

可能是您永远不想那么晚发送消息。然后,您可能希望确保发送所有错过的消息。您的代码应该能够在某种程度上自动处理这种情况。也许会自动做任何应该在过去一小时内完成但没有完成的事情,并且忽略任何比这更早的事情。对于较旧的东西,您必须手动运行脚本。确保您的脚本具有命令行参数,以简化您强制它在之前的时间间隔和特定活动 ID 运行的过程。这将使您在灾难发生后的生活更加轻松。

我建议你有一些报告,这样你就可以实时跟踪你的处理过程。如果您将状态信息写入数据库,则非常简单。添加处理结束时间戳,您甚至可以看到您的 cron 作业运行了多长时间。如果您不想在 cron 作业中使用此状态信息,您可以将其写入日志文件而不是数据库。在这种情况下(如果需要),您将使用锁定文件来指示 cron 作业何时运行并防止其他 cron 作业同时启动。无论如何,编写日志文件是一个很好的做法,这样您就可以记录发生的事情。想象一下,如果您的 cron 作业发送了一封电子邮件,但在尝试将状态写入数据库时​​崩溃了。您至少有一个日志行可以帮助您稍后进行调查。

我计划每 10 分钟运行一次通过这个 php 文件的 cron 作业(因为它是最短的检查间隔)

所以你的脚本的速度会随着数据量、外部服务的延迟而变化(假设你的脚本直接与这些服务对话)。我将从更长的 cron 作业开始间隔开始 - 假设您的客户端/用例允许这样做。如果您按照上面的建议让您的脚本自动处理跳过的时间,这不是问题。您处理的内容越多,您的脚本最终需要的时间就越多。所以在第 1 天它可能只需要 1 秒。但是在第 300 天可能需要 15 分钟?(此时您可以决定让多个进程/线程同时运行,每个进程/线程专注于单个活动或一系列活动。谁知道......)但是您会知道,因为您有报告/开始/结束处理时间的警报/日志。


推荐阅读