php - 当脚本运行超过 30 分钟时,数据库中的 PHP 脚本更新记录
问题描述
我有一个 PHP 脚本,它每晚运行以更新我的数据库中的记录。在我的数据库中,我也有这个脚本的记录:
文件名
脚本1.php
完全的
ñ
脚本完成后,我对数据库进行最后一次更新,这是更新“script1.php”并将其更改为“Y”
如果我删除了文件中除了最后一次调用数据库之外的所有内容,那么脚本会将“N”更改为“Y”就可以了。
问题是,在标记为完成之前,我正在获取记录并将它们插入到我的数据库中,总共需要 38 分钟。
这可能是我的问题,38 分钟后脚本完成,但它不会将“N”更新为“Y”。
代码
upload_max_filesize = 256M
post_max_size = 256M
max_input_vars = 10000
memory_limit = 512M
max_execution_time = 3000
这些是服务器上的配置设置,我无法更改这些设置,因为这些已经是我允许的最大设置。
虽然我得到一个 504 网关超时,但记录继续插入到数据库中。所有记录都被完美地插入,但是这个“N”并没有变成“Y”。
如何让脚本运行足够长的时间以将此 'N' 更新为 'Y' ?
按要求编码
<?php
// Run Script
require_once('removed');
ignore_user_abort(true); // just to be safe
echo('Script Started.');
flush();
// Do processing here
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('removed');
require('removed');
require('remvoed');
$filename = basename(__FILE__);
checkcrondependencies($filename);
//REMOVED DATA SUPPLIER CLASS
date_default_timezone_set("Europe/London");
$domainpath = realpath(dirname(__FILE__));
$inipath = REMOVED;
$privatepath = REMOVED;
$connection_settings = REMOVED;
$dbhost = $connection_settings['dbhost'];
$dbname = $connection_settings['dbname'];
$dbuser = $connection_settings['dbuser'];
$dbpass = $connection_settings['dbpass'];
//Make connection to supplier
$iscronfile = 'Y';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$conn) {
new_log_entry($filename,'DB Connection Failed','Y',$iscronfile);
die("Connection failed: " . mysqli_connect_error());
}
// pull data from supplier
//push data to DB
// Total time 38 minutes
echo "completed";
setcroncompleted($filename); // <<< THIS IS SUPPOSED TO CHANGE 'N' TO A 'Y'
new_log_entry($filename,'Run Time End:'.date("Y-m-d h:i:sa"),'N',$iscronfile);
解决方案
脚本通过cron运行?制作一些限制器来限制脚本执行。您可以让 cron 每分钟触发一个小时,但在 $script_is_busy == true 和 update_is_done = false 的地方记录。在限制器达到限制后,确保 $script_is_busy = false 并记录更新的距离。一分钟后,下一次 cron 迭代将继续更新。更新完成后记录 $update_is_done = true;。如果 cron 像 unpdate_is_dome == true 那样触发“empty scipt”,这没什么大不了的?死()。
推荐阅读
- cassandra - 当节点有 NTP 同步问题时,Cassandra 删除的行返回(重新出现)
- jakarta-ee - 连接数据库时出现 JDBC 问题
- python - 我正在尝试在 Python 中模拟电力,但电力似乎总是排斥
- python - 扁平化 python 元组 - django 字段选项 optgroups
- python - Python - 如果文本中包含“完整”单词,则打印出来,否则不要
- webpack - Webpack - 复制某些文件并保留它们各自的原始路径
- c - 仅读取和打印正数组索引
- reactjs - HowTo:从 Apollo 访问 client.mutate 方法?从 1.9.2 重构到 2.4.2
- dart - 我怎样才能让 BottomNavigationBar 粘在键盘颤动的顶部
- winapi - 是否可以按 FIFO 顺序将自定义消息放入 win32 消息队列中?