【问题标题】:Execute a timed command in a time command在一个时间命令中执行一个定时命令
【发布时间】:2013-04-12 15:56:46
【问题描述】:

我正在使用一个 php 应用程序,我需要在其中检查今天过生日的用户的数据库。 这是我通过 cron 工作完成的。

现在,当我收到生日的用户时,我需要向他们发送短信。 SMS 有一个单独的相关时间,该时间决定了何时发送 SMS。 假设约翰和彼得今天过生日。彼得从 01-09 工作,所以他应该在 01 收到短信,而彼得从 08-16 工作,所以他应该在 08 收到短信。

我正在考虑动态创建相同数量的 cron jbos,这等于在给定日期过生日的人。然后,这些 cron 作业会在这一次将 SMS 发送给适当的人,仅此而已。

我的问题是,有没有更聪明的方法来做到这一点? 其次,如果 cron 作业生成的想法足够好,有没有办法删除单个旧的 cron 作业,这样我就不会将 cron 作业列表与永远不会再次运行的旧作业混在一起?

提前致谢。

【问题讨论】:

    标签: php cron


    【解决方案1】:

    如果您想在特定时间使用 cronjobs 向每个人发送消息,那么您必须为每个人创建一个 cronjob。在我看来这是个非常糟糕的主意,因为您最终可能会获得超过 1000 个 cronjobs!

    如果系统每 5 分钟左右运行一次 cronjob(无论您希望的频率如何),您会好得多,并且此 cronjob 执行 PHP 脚本以确定当时是否有任何消息要发送,或者两者之间是否有任何消息要发送现在和最后一个 cronjob。

    虽然这可能意味着您的用户可能会延迟最多 5 分钟收到消息,但这不太可能,因为我认识的任何人都不会在 8:02 开始工作,因此,如果 cronjob 是在 8:00、8:05、8 :10 等,您几乎总能按时收到消息!

    【讨论】:

    • +1,非常清楚。最好有一个 cronjob 调用一个执行很多事情的脚本,而不是有很多 crontab 条目。
    • 这是我在阅读第一篇文章后得到的。感谢您的遮阳篷:)
    【解决方案2】:

    如果您担心创建过多的 cron 作业(不确定有多少会在您的系统上出现问题),那么为什么不在操作系统级别只创建一个 cron 作业呢?然后你可以每隔 10 分钟左右调用一次你的程序,它会检查是否有新人需要发送短信。

    【讨论】:

    • “问题”是 SMS 可以设置为 8.01 或 16.44 或任何时候。但我想我可以每分钟调用一次程序或设置 5 分钟的间隔限制。这可能行得通,谢谢!
    • @Rasmus 如果您将其设置为 1 分钟,请确保您的代码用时不到一分钟并且不会占用过多 CPU,因为它将与您的 httpd 和其他所有内容一起在您的服务器上运行.我举了一个 10 分钟的例子,因为 SMS 消息并不总是在你想要的那一刻发送,我相信你会发现的。此外,为什么有人需要在 16.44 准确地提醒某人的生日? 16.40 或 16.50 也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多