這里寫描述
我通過Timer::add定時拉取數(shù)據(jù)庫數(shù)據(jù)然后創(chuàng)建新的定時任務(wù)new Crontab最后發(fā)現(xiàn)創(chuàng)建了很多重復(fù)的定時任務(wù)
Timer::add(1, function() use ($mqtt) {
$res = Db::table("smart_timeTask")->select();
/這里省略了部分無關(guān)的代碼/
for ($a=0; $a < count($weekend); $a++) {
new Crontab("$time[1] $time[0] $weekend[$a]", function() use ($mqtt,$command){
$mqtt->publish('DO',$this->str2hex($this->$command),array("qos"=>2));
echo $this->$command."\n";
});
}
})
//通過$res的結(jié)果集數(shù)據(jù)循環(huán)創(chuàng)建定時任務(wù)
這里寫期待結(jié)果及實際結(jié)果
我希望數(shù)據(jù)庫的數(shù)據(jù)有更新同時,之前創(chuàng)建的定時任務(wù)也會更新----而且定時輪詢數(shù)據(jù)庫中的數(shù)據(jù),從而實現(xiàn)更新定時任務(wù)、不創(chuàng)建重復(fù)的定時任務(wù)
這里寫具體的系統(tǒng)環(huán)境相關(guān)信息
centos7 php7.4 workerman最細(xì)版本
可以先調(diào)用接口:Crontab::destroy()銷毀定時器,再重裝創(chuàng)建。
試過,但是容易錯過剛創(chuàng)建的定時器。比如一次循環(huán)結(jié)束就銷毀,如果下一秒剛好是之前創(chuàng)建的定時任務(wù)就會錯過
創(chuàng)建一個任務(wù)池,在循環(huán)的時候,先判斷池里有沒有這個任務(wù),有就先銷毀,再創(chuàng)建,沒有就直接創(chuàng)建。不是循環(huán)創(chuàng)建任務(wù)后就直接銷毀。