我有一个php网站,该网站的脚本使用来自外部API的数据对数据库执行更新。脚本本身工作正常,但是我需要定时,以便它每个星期一的2:30 AM执行一次。我正在使用一个无法使用SSH的虚拟主机,也不执行任何形式的命令执行,例如exec()
或passthru()
。我也看过CRON作业,但是我也不能使用它,因为我无权访问控制台。
我发现的另一个选择是使用带有phthreads的线程。但是似乎我需要一个额外的库(PECL)来使用它,但是又因为我不能使用任何控制台,所以无法安装该依赖项。
所以我想到的另一个解决方案是,窃取第一个访问该网站的用户的请求。我知道这不是一个漂亮的解决方案,这就是为什么我想问一下是否还有其他一些我可以安排任务的选项。还是窃取请求是这里的唯一选择?还是我的假设有误?
对我来说,VPS也无济于事。
对不起,我的英语不好,这不是我的母语。
答案 0 :(得分:0)
一种方法是让访问者触发更新。
将此添加到脚本中:
/**
* Checks if the database's last update was before
* Monday at 02:30
*
* @param \DateTime Time of last update. Must be converted to DateTime object
* @return boolean
*/
function databaseIsOutOfDate(DateTime $createDate) {
// find the last Monday at 2:30 am.
$monday = (new DateTime())->modify('tomorrow')->modify('previous monday')->format('Y-m-d 02:30:00');
$lastUpdated = $createDate->format('Y-m-d H:i:s');
return ($lastUpdated < $monday);
}
$date_time_from_database = '2019-05-27 02:30:00'; // this date value comes from your database
$last_updated = new DateTime($date_time_from_database);
if(databaseIsOutOfDate($last_updated)) {
print "Updating database, please try again later";
// trigger your update script
die; // if you continue, you'll have race condition.
}
print "continue with script";