在我的数据库表中,我有一个名为'start_datetime'的DATETIME字段。
时间部分始终以5分钟的间隔存储,没有秒数,例如:15:25:00或12:10:00或17:30:00
现在我需要设置一个CRON任务,它将在'start_datetime'前两天准确发送一封电子邮件。
这里有几个问题:
1)首先,我需要使用'start_datetime'查找所有记录,该记录正好在NOW之前2天(即运行查询的时间)
2)它应该忽略任何超过或少于2天的记录。考虑到时间是基于5分钟的间隔,我只能假设CRON任务必须每5分钟运行一次?这可能是个问题,因为我的托管服务提供商只允许CRON每小时最多运行一次
那么解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
它是否真的非常重要,它可以准确到5分钟的时间间隔,或者是否可以提前发送电子邮件至55分钟?
如果是这样,您可以运行一个查询,选择将在下一个小时内达到该2天标记的所有记录。
查询看起来像这样:(快速脏,未经测试)
SELECT * FROM table
WHERE CURRENT_TIMESTAMP >= DATESUB(startDate, INTERVAL 49 HOUR)
AND CURRENT_TIMESTAMP < DATESUB(startDate, INTERVAL 48 HOUR);
答案 1 :(得分:0)
由于你每小时只能运行一次cron,那么你只能选择发送所选值的电子邮件WHERE start_datetime在2天2天1小时之间,或者你可以设置一个web服务每隔5分钟从你自己的电脑用cron打电话,但不建议。
答案 2 :(得分:0)
您的提供商是否允许无限制的脚本执行时间?如果是这样,您可以创建一个脚本,通过sleep函数每五分钟查询一次数据库。
功能:
http://php.net/manual/en/function.sleep.php
伪代码:
function query_db() {
//query code
}
for($i = 1; $i <= 60; $i++) {
query_db();
sleep(300);
}