这期内容当中小编将会给大家带来有关如何使用Laravel定时发布任务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1、利用Linux的cronTab功能
(1)进入Linux服务器环境,命令行输入
crontab -e
这样就直接进入了服务器下的/var/spool/cron/root文件。如果/var/spool/cron/下还没有root文件,输入上面那个命令就会自动新建root文件了。
(2)先进入文件编辑模式,在root文件中输入
复制代码 代码如下:
* * * * * /usr/local/php/bin/php /opt/xxx/xxx/artisan schedule:run 1>> /dev/null 2>&1
前面第一个目录是php在服务器上的位置,如果不清楚,可以命令行输入which php
自行查看然后修改。
第二个目录是你的laravel项目的存放位置,就是artisan文件所在的根目录
2、然后在laravel项目目录下新建任务,命令行输入
php artisan make:command SendTask
然后发现在app/Console/Commands路径下多了一个SendTask.php的文件
自定义这个文件的$signature(等会儿要跟app/Console/Kernel.php文件中的command里面的名称对应,比如我写的是task:send)
、$description(对这个任务的描述)
、handle()
方法中是这个定时任务的主要逻辑代码。
3、然后修改app/Console/Kernel.php文件
在$commands里要增加刚刚的任务的存放路径;要同时执行多个任务时,将要同时执行的任务的class加入到$commands
protected $commands = [ \App\Console\Commands\SendTasks::class, \App\Console\Commands\SendTaskEveryDay::class, \App\Console\Commands\SendTaskEveryWeek::class,
schedule里面是定时执行的核心代码:可以自己直接在里面写要执行的任务的内容,也可以调用新建的command里的任务执行内容。后面就是说明执行任务的频次。
protected function schedule(Schedule $schedule) { // $schedule->call(function () { // Task::create(['title' => '发送定时任务']); // })->everyMinute(); //调用artisan // $schedule->command('tasks:send')->hourly(); $schedule->command('tasks:send')->cron('0 */2 * * *'); $schedule->command('tasks:everyday')->dailyAt('09:00');
其实到这里已经是可以执行发布定时任务的期待了,但是我希望可以传参到这个定时任务里面去,因为每次的任务内容不一样,需要达到可以自定义的效果。在这里纠结了很久,还尝试了修改handle()
方法,修改成为handle($data)
,然后在要发布定时任务的时候调用这个handle()
方法,然后将参数通过$data
传过来,但是发现一旦handle()
里面带参数之后定时任务就不能执行了,具体原因不知道,但是这个思路明显就是错了。
最后走了很多弯路,想到一个办法,不能从外部传参进去,就在方法里面把参数查出来。我想要的效果就是:新建一个任务,然后这个新建的任务需要每隔1小时自动新建一次。
想到的解决办法就是在handle()
方法里面用sql语句或者查询构造器先把新建的那个定时任务查出来,然后将这个任务再新增一次。暂时能想到的就是这个办法,起码可以达到我想要的效果了。
$cron=Task::where('type', 'xxx') ->first(); $cronTab=$cron->jsonSerialize(); $task= Task::create($cronTab);
Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
上述就是小编为大家分享的如何使用Laravel定时发布任务了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。