本篇文章给大家带来的内容是关于基于laravel框架下使用守护进程supervisor实现定时任务(毫秒),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
公司需要实现x分钟内每隔y秒轮训某个接口,linux自带的crontab貌似只精确到分钟,虽然可以到精确到秒,但是并不满足需求。
选型公司项目都是 基于 laravel 框架,所以这个没得选。守护进程用的 supervisor,看看这个家伙能不能满足我们的需求
代码namespace app\console\commands;use illuminate\console\command;use cache;use carbon\carbon;class taskcommand extends command { /** * the name and signature of the console command. * * @var string */ protected $signature = 'ue:task {--id= : 当前编号} {--max= : 最大线程} {--sleep= : 休眠多少毫秒} {--debug= : 是否调试模式} '; /** * the console command description. * * @var string */ protected $description = 'command description'; /** * create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * execute the console command. * * @return mixed */ public function handle() { $this->id = $this->option('id') '00'; $this->max = $this->option('max') 32; $this->sleep = $this->option('sleep') 700; $this->debug = $this->option('debug') false; if ($this->id > $this->max) { return true; } while (true) { $this->dorun(); } } /** * * @param int $taskid * @return boolean */ protected function dorun() { $lock = sprintf('task:%03d:%s', $this->id, time()); $data = [ 'id' => $this->id, 'max' => $this->max, 'time' => (new carbon)->format('y-m-d h:i:s.u'), 'key' => $lock, ]; try { $result = cache()->get($lock); if ($result) { $data['message'] = 'task has been executed.'; $this->wait($this->sleep); return true; } cache()->put($lock, true, 2); $data['message'] = 'task executed.'; $this->logger($data); $this->wait($this->sleep); } catch (\exception $ex) { $data['message'] = $ex->getmessage(); cache()->put($data, true, 2); $this->wait($this->sleep); } } /** * 毫秒 * @param string $time */ protected function wait($time) { $wait = $time * 1000; usleep($wait); } protected function logger($message) { if($this->debug){ $time = (new carbon)->format('y-m-d h:i:s.u'); $this->line(array_get($message, 'message') .' - '. $time); } logger()->stack(['task'])->debug(null, $message); }}
进程守护[program:task-worker]process_name=%(program_name)s_%(process_num)02dcommand=/usr/bin/php /home/wwwroot/demo/artisan ue:task --id=%(process_num)02d --max=8autostart=trueautorestart=trueuser=wwwnumprocs=8redirect_stderr=truestdout_logfile=/home/wwwroot/demo/storage/logs/worker.log
上面是supervisor的配置效果图task executed. - 2018-08-14 22:17:18.985094task executed. - 2018-08-14 22:17:19.336115task executed. - 2018-08-14 22:17:20.038236task executed. - 2018-08-14 22:17:21.090470task executed. - 2018-08-14 22:17:22.142716task executed. - 2018-08-14 22:17:23.195126task executed. - 2018-08-14 22:17:24.247698task executed. - 2018-08-14 22:17:25.300066task executed. - 2018-08-14 22:17:26.352638task executed. - 2018-08-14 22:17:27.054124task executed. - 2018-08-14 22:17:28.106420task executed. - 2018-08-14 22:17:29.158906task executed. - 2018-08-14 22:17:30.211438task executed. - 2018-08-14 22:17:31.263542task executed. - 2018-08-14 22:17:32.315923task executed. - 2018-08-14 22:17:33.017096task executed. - 2018-08-14 22:17:34.068963task executed. - 2018-08-14 22:17:35.121267task executed. - 2018-08-14 22:17:36.173600task executed. - 2018-08-14 22:17:37.226165
输出日志[2018-08-14 22:12:24] local.debug: {id:1,max:32,time:2018-08-14 22:12:24.389224,key:task:001:1534255944,message:task executed.} [2018-08-14 22:12:25] local.debug: {id:1,max:32,time:2018-08-14 22:12:25.390158,key:task:001:1534255945,message:task executed.} [2018-08-14 22:12:26] local.debug: {id:1,max:32,time:2018-08-14 22:12:26.391594,key:task:001:1534255946,message:task executed.} [2018-08-14 22:12:27] local.debug: {id:1,max:32,time:2018-08-14 22:12:27.393196,key:task:001:1534255947,message:task executed.} [2018-08-14 22:12:28] local.debug: {id:1,max:32,time:2018-08-14 22:12:28.395124,key:task:001:1534255948,message:task executed.} [2018-08-14 22:12:29] local.debug: {id:1,max:32,time:2018-08-14 22:12:29.396796,key:task:001:1534255949,message:task executed.} [2018-08-14 22:12:30] local.debug: {id:1,max:32,time:2018-08-14 22:12:30.398666,key:task:001:1534255950,message:task executed.} [2018-08-14 22:12:31] local.debug: {id:1,max:32,time:2018-08-14 22:12:31.400561,key:task:001:1534255951,message:task executed.} [2018-08-14 22:12:32] local.debug: {id:1,max:32,time:2018-08-14 22:12:32.402462,key:task:001:1534255952,message:task executed.} [2018-08-14 22:12:33] local.debug: {id:1,max:32,time:2018-08-14 22:12:33.404092,key:task:001:1534255953,message:task executed.} [2018-08-14 22:12:34] local.debug: {id:1,max:32,time:2018-08-14 22:12:34.405550,key:task:001:1534255954,message:task executed.} [2018-08-14 22:12:35] local.debug: {id:1,max:32,time:2018-08-14 22:12:35.407197,key:task:001:1534255955,message:task executed.} [2018-08-14 22:12:36] local.debug: {id:1,max:32,time:2018-08-14 22:12:36.408920,key:task:001:1534255956,message:task executed.} [2018-08-14 22:12:37] local.debug: {id:1,max:32,time:2018-08-14 22:12:37.410841,key:task:001:1534255957,message:task executed.} [2018-08-14 22:12:38] local.debug: {id:1,max:32,time:2018-08-14 22:12:38.412764,key:task:001:1534255958,message:task executed.} [2018-08-14 22:12:39] local.debug: {id:1,max:32,time:2018-08-14 22:12:39.414518,key:task:001:1534255959,message:task executed.} [2018-08-14 22:12:40] local.debug: {id:1,max:32,time:2018-08-14 22:12:40.416229,key:task:001:1534255960,message:task executed.} [2018-08-14 22:12:41] local.debug: {id:1,max:32,time:2018-08-14 22:12:41.418001,key:task:001:1534255961,message:task executed.} [2018-08-14 22:12:42] local.debug: {id:1,max:32,time:2018-08-14 22:12:42.419476,key:task:001:1534255962,message:task executed.} [2018-08-14 22:12:43] local.debug: {id:1,max:32,time:2018-08-14 22:12:43.421388,key:task:001:1534255963,message:task executed.} [2018-08-14 22:12:44] local.debug: {id:1,max:32,time:2018-08-14 22:12:44.423164,key:task:001:1534255964,message:task executed.} [2018-08-14 22:12:45] local.debug: {id:1,max:32,time:2018-08-14 22:12:45.424798,key:task:001:1534255965,message:task executed.} [2018-08-14 22:12:46] local.debug: {id:1,max:32,time:2018-08-14 22:12:46.426667,key:task:001:1534255966,message:task executed.} [2018-08-14 22:12:47] local.debug: {id:1,max:32,time:2018-08-14 22:12:47.428553,key:task:001:1534255967,message:task executed.} [2018-08-14 22:12:48] local.debug: {id:1,max:32,time:2018-08-14 22:12:48.430427,key:task:001:1534255968,message:task executed.} [2018-08-14 22:12:49] local.debug: {id:1,max:32,time:2018-08-14 22:12:49.432118,key:task:001:1534255969,message:task executed.} [2018-08-14 22:12:50] local.debug: {id:1,max:32,time:2018-08-14 22:12:50.433893,key:task:001:1534255970,message:task executed.} [2018-08-14 22:12:51] local.debug: {id:1,max:32,time:2018-08-14 22:12:51.435711,key:task:001:1534255971,message:task executed.} [2018-08-14 22:12:52] local.debug: {id:1,max:32,time:2018-08-14 22:12:52.437015,key:task:001:1534255972,message:task executed.} [2018-08-14 22:12:53] local.debug: {id:1,max:32,time:2018-08-14 22:12:53.438352,key:task:001:1534255973,message:task executed.} [2018-08-14 22:12:54] local.debug: {id:1,max:32,time:2018-08-14 22:12:54.439989,key:task:001:1534255974,message:task executed.} [2018-08-14 22:12:55] local.debug: {id:1,max:32,time:2018-08-14 22:12:55.441580,key:task:001:1534255975,message:task executed.} [2018-08-14 22:12:56] local.debug: {id:1,max:32,time:2018-08-14 22:12:56.443116,key:task:001:1534255976,message:task executed.} [2018-08-14 22:12:57] local.debug: {id:1,max:32,time:2018-08-14 22:12:57.445006,key:task:001:1534255977,message:task executed.}
相关推荐:
用php实现守护进程任务后台运行与多线程(php-resque使用说明)
php定时计划任务框架分享
php框架laravel中实现supervisor执行异步进程
以上就是基于laravel框架下使用守护进程supervisor实现定时任务(毫秒)的详细内容。