Laravel 定时任务

2017-8-9   /   字数:1118   /   阅读数:22666   /   分类: Laravel     

简介

定时任务是后端开发过程中一项十分常见的需求,常出现在数据统计、垃圾信息清理等场景中。Laravel 提供了一整套的定时任务工具,让我们只需要专注地完成逻辑,剩下的基础工作将由它来承担。

基本用法

生成命令

php artisan make:command AreYouOK

5.2 及之前的版本,此命令为 php artisan make:console xxx

编辑命令

编辑 app/Console/Commands/AreYouOK.php 文件,修改如下几处:

... ...
protected $signature = 'areyou:ok'; // 命令名称
protected $description = '雷军,科技圈最会唱歌的男人'; // 命令描述,没什么用

public function __construct()
{
    parent::__construct();
    // 初始化代码写到这里,也没什么用
}
public function handle()
{
    // 功能代码写到这里
}

注册命令

编辑 app/Console/Kernel.php 文件,将新生成的类进行注册:

protected $commands = [
    \App\Console\Commands\AreYouOK::class,
];

编写调用逻辑:

protected function schedule(Schedule $schedule)
{
    $schedule->command('areyou:ok')
             ->timezone('Asia/Shanghai')
             ->everyMinute();
}

上面的逻辑是每分钟调用一次。Laravel 提供了从一分钟到一年的各种长度的时间函数,直接调用即可。

把这个 Laravel 项目注册到系统的 cron 里

编辑 /etc/crontab 文件,加入如下代码:

* * * * * root /usr/bin/php /var/www/xxxlaravel/artisan schedule:run >> /dev/null 2>&1

上面一行中的 /var/www/xxxlaravel 需要改为实际的路径。

fire

重启 cron 激活此功能:systemctl restart crond.service,搞定!

WRITTEN BY

avatar
标签: Laravel 进阶

评论:

L Get Y
2019-09-06 11:18
收下了
jim
2019-06-06 17:46
为什么我按照上面的步骤弄完还是没有效果,说没有运行的东西
追梦小窝
2019-01-02 22:16
不错,转走啦
因苏阿
2018-01-27 10:55
windows服务器怎么弄啊?
qingdian_yanghao
2017-10-17 18:19
因为PHP是单进程的,在使用laravel 的定时任务的时候回发现方法的执行顺序对执行的结果有影响,我中间如果有个方法里面报错那么进程就断了,下面的脚本也不会执行了。有没有遇到过这种情况,怎么解决的或者是避免的。期待您的反馈。
JohnLui
2017-10-17 19:53
@qingdian_yanghao:用 @ 抑错......
hhxsv5
2018-01-04 16:56
@JohnLui:使用@抑制错误 性能降低至20分之一。
大哥
2022-08-29 18:21
@hhxsv5:看项目吧
qufo
2018-02-06 00:17
@qingdian_yanghao:为什么要避免,报错了本该中止执行嘛,如果报错了下面的脚本还继续执行 ---- 要报错干吗? 如果连接数据库失败了,还执行查询语句做什么?如果访问了根本不存在的对象,你取出对象的 username 属性来干什么?

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog