我有一个长时间运行的脚本(根据设置,从30到160秒不等),它使用NuSOAP从API请求数据,基于这些数据它构建了一个很大的~1000-4000行插入查询。它会截断一个表并插入大查询。
当我一个接一个地运行这些脚本时,它会产生一个丢失数据的问题。我想防止这个脚本同时运行两次。
这个脚本将来也将通过cron/任务调度程序每5-10分钟运行一次。
目前,我通过检查文件是否存在来阻止同时运行脚本:
<?php
header('content-type: application/json');
ignore_user_abort(true);
if (!file_exists('lock.txt')) {
$lock = fopen('lock.txt','w');
fclose($lock);
//~450 API requests using NuSOAP.
//TRUNCATE `table`
//INSERT ~1000-4000 rows into `table
$jsonArray = array(utf8_encode('script')=>utf8_encode('finished'));
unlink('lock.txt');
} else {
$jsonArray = array(utf8_encode('script')=>utf8_encode('locked'));
}
echo json_encode($jsonArray);
?>这是阻止脚本同时运行的安全方法吗?最好是检查MySQL列是否包含“true”或“false”,而不是一个文件?
有更好的方法吗?
发布于 2016-03-18 08:21:09
我认为锁文件可能不是理想的,我宁愿创建一个临时会话变量来检查'True‘或'False’,以确定脚本是否正在运行。
另外,我还可以跟踪执行每个脚本所需的实际时间,这对于检查不必要的时间和总体平均时间非常有用。
即使您通过CRON运行脚本,在使用session_id()之前手动分配session_start(),您仍然能够使用会话。
然而,Cookies将是浏览器依赖的,它将不能与Cron一起工作。
https://stackoverflow.com/questions/36079250
复制相似问题