首頁  >  文章  >  後端開發  >  關於php cron任務管理的實作假想

關於php cron任務管理的實作假想

巴扎黑
巴扎黑原創
2016-11-10 09:47:441146瀏覽

之前每開發一個計畫任務功能都需要在線上操作crontab來新增項目,所以想採用PHP來統一管理單一專案中的任務項目, 

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

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

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

 

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

 

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

2. 守護程序,同一時刻只能運行一個實例 

 

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

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

 

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

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

 

lock_id: $task_id 

lock_{$task_id}_quota: $quota  

 

每次重新申請鎖定,均需再次讀取任務配置表中該任務的配置資訊),則關閉此次執行,等待下次執行. 這樣當想中止此種任務時可採取2種方案: 

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

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

 

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

 

無效鎖的判定: 

關鍵是如何確定任務實例是否是活著的,鎖配額

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

 

幹掉後是否有影響? 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn