我有基於此數據使用的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'?)來確保您的數據不會以不一致的狀態結束? –