2013-03-20 18 views
0

我有一個cron作業每隔幾分鐘運行一次,通過「待辦事項」列表中的前50個項目,在每個項目上運行腳本並將其標記爲運行在數據庫中。如何確保sql表未鎖定/停止併發crons

這一直很好,直到表中標記爲完成的物品被物品鎖定並且物品沒有被標記爲關閉。然後,克倫再次跑過去,並通過相同的50件物品。

這樣重複和重複,直到mysql中的進程列表非常龐大,並且每隔幾分鐘只能增加50個。

我怎麼能停止這種事情? 我的想法是:

  • 將代碼添加到腳本來查看正在運行的新的選擇查詢,以獲得未來50之前,如果cron是爲被鎖定的表重新運行
  • 檢查MySQL表之前仍在運行物品

他們都似乎起起落落,我不知道如何正確實施。 任何人有任何建議/更好的想法?

+0

將鎖定文件添加到更新shell腳本中。 1)檢查是否存在鎖定:退出其他創建鎖定2)做功3)刪除鎖定 – wildplasser 2013-03-20 17:47:35

回答

1

您可以採取幾種方法。

  1. 修改你的表以跟蹤狀態。例如待辦事項,已啓動,完成。只處理「待辦事項」。直到您將其標記爲已啓動,才能開始任務。如果cron作業失敗,您將需要創建一種重新啓動任務的方法。

  2. 如果您無法將事務標記爲完整,請使用事務並回滾任務的內容。

  3. 同步cron作業的執行,一次只允許執行一次執行。要做到這一點,你可以鎖定一個文件。在開始時檢查文件,如果它不能得到你退出的鎖。

  4. 讓cron作業永不停息地運行,而不是定期執行。

+0

非常感謝這些,我認爲選項1是我最好的選擇,儘管它需要額外的SQL調用。它會增加人們能夠隨時查看哪些項目正在進行的額外功能。 – fiscme 2013-03-30 14:11:24