由于之前都是使用crontab实现定时任务,可以指定每一天几点执行任务, 后面发现workerman很好用,可以自己建多个workerman跑任务,每个任务做自己的业务, 有些场景也许是需要一分钟或者20秒跑一次,但对于数据同步需要延迟一天的, 我只需要每天凌晨1点执行一次,但不知道workerman支不支持固定时间执行任务的
貌似不支持的,我是这样做的
Timer::add(60*60, function(){ if (date('H') == 1) { // 干活... } });
复杂的任务排程,可以参考一下这个工具 https://github.com/mtdowling/cron-expression
基本上可以跟 crontab 一样来设置排程,然后用定时器每分钟跑一次就可以了。
当然如果你的需求没有那么复杂,只是固定每天凌晨 1 点执行一次的话,楼上的方法是最简单的了,执行效率也可能高一点。
其实这种可以设置一个定时器,自动获取下次执行的时间,比如凌晨一点执行,启动服务计算下次凌晨一点还需要多少秒,这是一个一次性的定时器,执行完之后再次调用启动定时器的方法!这样应该就可以了!
貌似不支持的,我是这样做的
复杂的任务排程,可以参考一下这个工具 https://github.com/mtdowling/cron-expression
基本上可以跟 crontab 一样来设置排程,然后用定时器每分钟跑一次就可以了。
当然如果你的需求没有那么复杂,只是固定每天凌晨 1 点执行一次的话,楼上的方法是最简单的了,执行效率也可能高一点。
其实这种可以设置一个定时器,自动获取下次执行的时间,比如凌晨一点执行,启动服务计算下次凌晨一点还需要多少秒,这是一个一次性的定时器,执行完之后再次调用启动定时器的方法!这样应该就可以了!