我有一个基于PHP的网站,预订/约会存储在MySQL数据库中。
我想设置一个电子邮件通知,发送给每个预订前24小时预订的人。 预订通过常规的PHP表单添加。
我知道我可以添加一个脚本,例如,检查数据库的最后24小时内的任何预订的索引页,但这是不可靠的,因为我一开始就不会获得很多stream量。 因此,索引页面可能会在没有访问的情况下花费数小时,而通知将会延迟数小时。
另一个想到的解决scheme是设置每分钟运行的cron作业,调用一个PHP脚本来检查是否应该发送和发送电子邮件。 但我不确定这是否有点矫枉过正; 每个人都有更好的解决办法,比每分钟在后台运行一些东西吗?
总结一下 – 有没有办法做到这一点,没有cron?
从网页触发工作是一个非常糟糕的主意,原因有两个:(1)如果您没有获得网站访问量,则该作业不会运行; (2)如果你收到很多通知,这个工作将会减慢对web请求的响应(假设你同步地调用这个工作)。
我强烈劝阻你不要每分钟都要做一份工作 – 这肯定会是一个过度的杀手。 相反,要考虑你是否真的需要“正好24小时”的间隔或“22至26小时之间”是否可以。
我们也有类似的要求 – 通过设置一个每4小时运行一次的作业来解决这个问题,并检查脚本运行时间从22到26小时之间开始的事件是否需要发送通知。 这样,脚本一天只执行6次,一切正常发送。
如果4小时的近似值不够好,那么考虑到最合适的时间间隔。 我相信1小时就够了。 让脚本每小时运行一次(从cron开始),检查从运行开始的23到24小时之间的事件。
请记住,一旦您的电子邮件发送,它不会立即在收件人的收件箱中:有时需要几秒钟,但有时可能需要一个小时甚至更多 – 所以在脚本中额外的小时差异将不会一个问题。
您不需要使用cron作为间隔计时器。 你可以设定一个非常具体的日期和时间,当你想完成工作。
这里是关于这个主题的文章
例如:
0 0 18 5 * <php command here>
将在每个五月十八号午夜运行。 在下一次迭代(明年)之前,这已经足够了。
除了通过定期调用设置cron或向服务器发送请求之外,没有办法…下面是类似于你的问题,你可能会有想法。
基于使用JSON或AJAX的定期服务器调用进行实时重定向
谢谢
每分钟一个cron工作是没有意义的! 但是你可以每小时做一个cron工作,因为我认为它不会计算一个小时的差或2个小时。 没有cron这是没有任何其他的方式。 它将需要约2秒(在最大)来完成,所以它是值得的