每分钟通过CRON发送电子邮件-我的方法可以改进吗


Sending emails by CRON every minute - can my method be improved?

我正在开发一个提醒类型的网站,在那里你可以设置要发送给自己的提醒,设置提醒的时间,当时间到来时,你会收到一封电子邮件。

然而,提醒并不重要,大约5-10分钟的延迟是可以接受的。

我有两个选择:

1) 每分钟运行一个cron脚本。脚本将检查数据库中是否有为CURTIME()安排的任何事件(即,如果cron在5:35:30运行,它将检查在5:35:00设置的任何提醒)。如果未找到,请终止。如果发现,请发送电子邮件。

2) 或者,我可以每10分钟运行一次Cron脚本。此脚本将检查从现在到10分钟前是否安排了任何提醒。例如,如果cron在5:35:30运行,它将在5:35:00到5:35:00之间检查是否有任何提醒。如果找到,发送它们;如果没有,则终止。

我对第二种方法唯一的问题是,如果这不会导致一些提醒不被发送,我不确定。

例如,如果服务器的负载更高,而Cron计划在5:35:00运行,而不是在5:37:00运行,该怎么办。那么,任何安排在5:35:00的电子邮件都可能被错过。

我应该采用哪种方法?

它们是同一个选项,只是句点不同。

您可能会认为这是一次有效期间轮询或队列扫描,但"非实时",因此您必须针对滞后进行设计。

一般来说,每次扫描都应该假设它可能被延迟了,而且系统应该有一些定义的策略来处理"太旧"的排队通知。(如果系统在扫描新排队的通知之前关闭了一个小时怎么办?)

为了保证健壮性,请确保队列处理是原子的或同步的——无论是并发扫描还是后续扫描,都不会对项目进行双重处理。

在Windows和Unix机器上,有at,用于在指定时间安排一次性作业。除非你发送的电子邮件太多,以至于每分钟检查/发送更有意义,否则简单地使用"保存我的提醒"代码来安排通过at作业发送可能会更容易。