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