我有基于此数据使用的NuSOAP的API请求数据时,它建立一个大〜1000-4000行插入查询长时间运行的脚本(从30到160秒,根据设置的任何地方)。它比截断表并插入大查询。防止PHP脚本同时运行多次的最佳方法?
当我运行的脚本过于紧密定时一前一后它会创建它丢失数据的问题。我想阻止这个脚本同时运行两次。
该脚本将在未来还可以通过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,而不是文件?
有没有更好的办法?
使用带时间戳的数据库条目会更好。 – shikhar
在文件/ db中使用事务和存储运行状态。 – Gogol
您是否可以不使用数据库事务(可能是'DELETE'而不是'TRUNCATE'?)来确保您的数据不会以不一致的状态结束? –