請問如何控制只在主機(jī)上運(yùn)行定時任務(wù)
或者有沒有可能生成一個獨立的業(yè)務(wù)進(jìn)程,專供定時器運(yùn)行
比如設(shè)定: $worker->count = 5
我只想在1、2號進(jìn)程上運(yùn)行定時器:
$worker->onWorkerStart = function($worker){
if(in_array($worker->id, [1,2])){
Timer::add(...);
}
};
@614:可能我沒描述清楚,現(xiàn)在的問題是部署在了ABC3臺機(jī)器,運(yùn)行起來后ABC3臺上都有定時任務(wù),但是只想在A的0號worker上運(yùn)行定時任務(wù),請問這樣應(yīng)該如何處理?
這個看你具體怎么實施系統(tǒng)管理了,方法很多,比如:
可以將所有參與分布式部署的機(jī)器以及對應(yīng)的worker服務(wù)以及定時器等等信息匯總起來進(jìn)行集中性的系統(tǒng)(共享)存儲管理,然后在某臺特定的機(jī)器上運(yùn)行一個監(jiān)控腳本,通過分析前面的匯總數(shù)據(jù)定制啟動目標(biāo)服務(wù)。
@614:如果我想簡單點處理的話,可不可以A上開5個gateway進(jìn)程,B和C還是4個,然后定時器只在$worker->id === 5的時候運(yùn)行;這樣能否確保整個負(fù)載均衡只運(yùn)行一次定時器?
按照你設(shè)定的這個簡單處理邏輯,希望不同機(jī)器上同一份代碼能夠預(yù)期工作,如果非要這么做(若更改進(jìn)程數(shù)代碼判定邏輯就會受影響),我認(rèn)為也是可以的,不過代碼邏輯要注意需要判定的是 $worker->id == 4 而不是5,因為進(jìn)程編號索引是從0開始計數(shù)的。