请问怎么定时每天9:00执行指定任务 ?

dignfei

请问怎么定时每天9:00执行指定任务 ?

我需要每天9:00执行一些操作,然后重启worker子进程

阅读 1476
2个回答

blogdaren
$worker->onWorkerStart = function($worker)
{
    Timer::add(1, function(){
        if('09:00:00' == date('H:i:s'))
        {
           //这里写业务逻辑
           Worker::stopAll(); 
        }
    }, [], true);
};
  • dignfei 2020-03-31

    要是错过了09:00:00怎么办,比如有任务阻塞了直到09:00:05才反应过来?

  • blogdaren 2020-03-31

    那就把阻塞的任务抽出来变成异步非阻塞的来搞

  • blogdaren 2020-03-31

    另外你还可以使用crontab精准控制定时器,然后在指定的时间发送事件到worker进程(开个业务端口)来处理。

  • pader 2020-04-02

    每秒做一次判断,显然消耗太大了,最小精确到分钟即可。另外建议做法是计算出下个9点相差的秒数,设一个这个秒数的定时器即可,几乎无消耗。如果怕错过9点,那肯定要通过一定的逻辑,保存要执行的任务列表,或者使用延迟消息队列。

  • 张先生 2020-04-02

    用Java的elastic_job
    用workerman的定时器,
    用系统的crontab,
    用环形队列自己实现,
    用redis的消息失效订阅通知
    都可以实现,看你的业务,怕错过可以跑异步任务

q13113671764

像上面的代码,可以定义个时间范围,,然后在那个范围查询数据库有没有执行记录,没有就执行下去,然后添加执行记录,我就是一直这样写的

  • 暂无评论