我需要運行一個PHP腳本,我要確保沒有在同一時間運行多個腳本。如何使用mysql數據庫管理單線程作業?
我使用MySQL和我雖然對這一解決辦法:
我建立了波紋管數據庫:
job_id | task_id | last_updated_time (AUTO UPDATE)
"sending_emails" 77238 2107-5-3 12:2:2
運行我創建隨機任務ID的腳本之前,我運行一個查詢更新task_id。
$task_id = generate_random_task_id();
$query = "
UPDATE
jobs
SET
task_id = $task_id
WHERE
task_id = $task_id
OR
NOW() - last_updated_time > 30
LIMIT 1
"
/*
Then I need to check if there was an update, if yes then I will run the script otherwise i will stop since there is already another script running
*/
$query = "SELECT JOB_ID WHERE taks_id = $task_id "
$result = run($query)
if(! isset($result[JOB_ID])){
DIE();
}
有兩種腳本可以同時運行嗎?
謝謝你的回答,但我不確定爲什麼finish_time可以工作,而我的工作不起作用? –
您能否看看@Darshan Mehta的答案! –
撇開沒有指定間隔的時間在SQL中進行計算的複雜性,只有您能夠*保證執行時間少於30秒才能滿足您的目標。根據數據庫中的併發模型,還會出現競爭條件。此外,在您的示例中,您的任務ID生成中的熵值非常低 - 如果您以高頻率運行此操作,則會在某個時間點發生碰撞。我需要繼續嗎? – symcbean