前一段时间做了不少的定时任务,现在来跟大家聊聊我开发定时任务过程中我与定时任务斗智斗勇的血泪史。laravel这个大框架可谓是包罗万象了,定时任务都帮大家封装的好好的,如果大家想要参考laravel官网的话,我劝大家放弃,访问速度太慢不说,纯英文的如果没有点英文功底,怕是很难翻译出有些东西,好了,上代码吧。
app/Console/Commands目录下,新建你的逻辑代码:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; class Count extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'count:count'; /** * The console command description. * * @var string */ protected $description = '定时计算'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { //这里书写你的具体想要实现的事情 } }
app/Console/Kernel.php文件书写你的定时频率
protected function schedule(Schedule $schedule) { //这里是定时任务的执行频率 $schedule->command("count:count") ->dailyAt('00:05'); }
如果想在本地测试你的定时任务是否正确也很简单,执行以下artisan命令即可
php artisan count:count 即可实现本地执行测试,如果有报错就要认真找一下自己的逻辑代码部分是否有误。
以上只是逻辑区,现在是血泪史,当时碰到的问题是,本地执行OK,然后放到测试环境去测试,那才是搞死人,命令执行了,但是进程始终无法退出,导致整个测试环境被拖死,近乎崩溃的状态,我翻阅了几乎所有相关的资料,走遍了所有相关社区、论坛、github始终找不到相关的解决办法,近乎绝望的快倒下了,最终查到是crontab出了问题,原来的crontab连接的是正式环境,连接过程出了问题,导致整个进程一直挂在那儿无法退出,我要狂吐血啊。
好了,相关问题已经说完了,是否仍有不明白的开发小伙伴,如果不明白,可以发送邮件至13480167059@163.com,我将在方便的时候恢复您的每一条留言