關於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 能否認定是無效鎖.會不會出現任務在重新申請鎖的過程中?
被 無效鎖檢測機制給幹掉??
?
幹掉之後是否有影響??
?
--------------?
以上是我的假想,求拍磚?
?