關於php cron任務管理的實現假定

來源:互聯網
上載者:User
關於php cron任務管理的實現假想
之前每開發一個計劃任務功能均需要線上上操作crontab來新增項,所以想採用PHP來統一管理單個項目中的任務項,?

可以通過建立表[id,name,status,func,timer,last_time,created_at] 來統一存放項目中的計劃任務指令碼,通過簡單的配置?

能將各計劃任務抽象成簡單的任務類,然後通過crontab中配置的單個入口對其進行統一訪問,從而減少了上線代碼對?

線上伺服器環境進行修改的麻煩.?

?

然後此處有一些坑,因為任務按功能性質劃分可能有好幾種,比如:?

?

1. 單次執行,立刻結束,同一時刻可運行多個執行個體?

2. 守護進程,同一時刻只能運行一個執行個體?

?

對 第二種 需要?加鎖?機制,還要防止程式因為出現爆錯,異常等情況沒有解鎖,導致不能再次啟動此種任務?

對於此種任務還需要考慮運行期間如果因其他需求變更,如何快速方便的終止此任務?

?

猜想 通過 任務id ?來實現鎖機制,每次任務執行時均需要申請鎖,每次申請的鎖均有固定的使用配額,此種任務?

每批次執行完成後均需消耗一次使用配額,當配額為0時則需要向系統重新申請鎖.?

?

lock_id: $task_id?

lock_{$task_id}_quota: $quota??

?

每次重新申請鎖,均需再次讀取任務配置表中該任務的配置資訊?

?

如果申請失敗(-1),則關閉此次執行,等待下次執行. 這樣當想中止此種任務時可採取2種方案:?

1. 中止本次,只需將其使用配額設為-1?

2. 完全禁止,重設本任務的status為禁用,再重設其使用配額為-1?

?

任務結束之後,要釋放鎖,如果鎖釋放失敗,需要有一個?無效鎖檢測機制來強制釋放?

?

無效鎖的判定:?

關鍵是 如何確定 任務執行個體是否是活著的,鎖配額 < 1 能否認定是無效鎖.會不會出現任務在重新申請鎖的過程中?

被 無效鎖檢測機制給幹掉??

?

幹掉之後是否有影響??

?

--------------?

以上是我的假想,求拍磚?

?

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.