在特定活动开始前24小时安排电子邮件通知?

时间:2012-05-17 16:19:25

标签: php mysql linux cron

我有一个基于PHP的网站,预订/约会存储在MySQL数据库中。

我想在预订前24小时向每位预订者发送电子邮件通知。预订通过常规PHP表格添加。

我知道我可以添加一个脚本,例如,索引页面检查数据库中是否有最后24小时内的任何预订,但这是不可靠的,因为我最初不会获得太多流量。所以索引页面可能会在几小时内没有访问,并且通知会延迟几个小时。

我想到的另一个解决方案是设置一个每分钟运行一次的cron作业,调用一个PHP脚本来检查是否应该发送任何电子邮件并发送它们。但我不确定这在某种程度上是否有点过分;有没有人比每分钟在后台运行一些东西有更好的解决方案?

总结一下 - 有没有办法在没有cron的情况下做到这一点?

4 个答案:

答案 0 :(得分:1)

从网页触发作业是一个非常坏主意,原因有二:(1)如果您没有获得网站流量,则该作业无法运行; (2)如果收到大量通知,则作业将减慢对Web请求的响应(假设您同步调用作业)。

我强烈反对你每分钟都要做一份工作 - 这绝对是一种矫枉过正。相反,想想你是否确实需要“正好24小时”作为间隔,或者“在22到26小时之间”就可以了。

我们有类似的要求 - 并通过设置每4小时运行一次的作业并检查需要为脚本运行时间22到26小时之间的事件发送通知来解决这个问题。这样,脚本一天只执行6次,一切都正确发送。

如果4小时近似值不够好,那么请考虑适当的最大间隔。我相信1小时应该足够了。让脚本每小时运行一次(来自cron),并检查从运行之日起23到24小时内开始的事件。

请记住,一旦您的电子邮件被发送,它就不会立即收到收件人的收件箱中:有时需要几秒钟,但有时可能需要一个小时甚至更长时间 - 因此您的脚本中的额外小时差异将赢得不成问题。

答案 1 :(得分:0)

您不需要将cron用作间隔计时器。您可以在希望完成工作时设置非常具体的日期和时间。

<强> Here's an article on the subject

例如:

0 0 18 5 * <php command here>

每年5月18日午夜开始。这是在下一次迭代(明年)之前清除它的时间。

答案 2 :(得分:0)

除了设置cron或通过定期调用向服务器发送请求之外没有办法......下面的帖子类似于你的问题,你可能会有所了解。

Live redirect based on periodic server calls with JSON or AJAX

谢谢

答案 3 :(得分:0)

每分钟一个cron工作都没有意义!但你可以每小时做一次cron工作,因为我认为它不会计算一小时差异或2小时。没有cron它没有任何其他方式。它需要大约2秒钟(最多)完成所以值得