首页 > php框架 > Laravel > laravel任务调度的介绍(附代码)

laravel任务调度的介绍(附代码)

不言
发布: 2019-04-12 09:52:04
转载
3427 人浏览过

本篇文章给大家带来的内容是关于laravel任务调度的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

导语:之前写过使用 Linux 的进行定时任务,实际上 laravel 也可以执行定时任务。需求是统计每日访问的 IP 数,虽然数据表中有数据,为了演示,新建监听器统计。

记录 IP

这篇文章中介绍了实现了事件/监听器,在此基础上进行扩展。

注册一个新的监听器,在 app/Providers/EventServiceProvider.php 文件中新添加 CreateUserIpLog

1

2

3

4

5

6

7

8

9

10

11

12

13

14

/**

     * The event listener mappings for the application.

     *

     * @var array

     */

    protected $listen = [

        Registered::class => [

            SendEmailVerificationNotification::class,

        ],

        'App\Events\UserBrowse' => [

            'App\Listeners\CreateBrowseLog',// 用户访问记录

            'App\Listeners\CreateUserIpLog',// 用户 IP 记录

        ],

    ];

登录后复制

添加完成后执行 php artisan event:generate,创建好了 app/Listeners/CreateUserIpLog.php 文件;

  1. 在新建监听器中,记录用户的 IP,使用 Redis 的 Set 数据类型进行记录,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

/**

     * Handle the event.

     * 记录用户 IP

     * @param  UserBrowse $event

     * @return void

     */

    public function handle(UserBrowse $event)

    {

        $redis = Redis::connection('cache');

        $redisKey 'user_ip:' . Carbon::today()->format('Y-m-d');

 

        $isExists $redis->exists($redisKey);

 

        $redis->sadd($redisKey$event->ip_addr);

 

        if (!$isExists) {

            // key 不存在,说明是当天第一次存储,设置过期时间三天

            $redis->expire($redisKey, 259200);

        }

    }

登录后复制

统计访问

上面将用户的 IP 记录下来,然后就是编写统计代码

  1. 新建一个任务 php artisan make:command CountIpDay,新建了 app/Console/Commands/CountIpDay.php 文件;
  2. 设置签名 protected $signature = 'countIp:day'; 和描述 protected $description = '统计每日访问 IP';
  3. handle 方法中编写代码,也可以在 kernel.php 中使用 emailOutputTo 方法发送邮件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/**

     * Execute the console command.

     *

     * @return mixed

     */

    public function handle()

    {

        $redis = Redis::connection('cache');

        $yesterday = Carbon::yesterday()->format('Y-m-d');

        $redisKey 'user_ip:' $yesterday;

 

        $data $yesterday ' 访问 IP 总数为 ' $redis->scard($redisKey);

 

        // 发送邮件

        Mail::to(env('ADMIN_EMAIL'))->send(new SendSystemInfo($data));

    }

登录后复制

设置任务调度

  1. 编辑 app/Console/Kernel.php$commands

1

2

3

4

5

6

7

8

/**

     * The Artisan commands provided by your application.

     *

     * @var array

     */

    protected $commands = [

        \App\Console\Commands\CountIpDay::class,

    ];

登录后复制
  1. schedule 方法中设置定时任务,执行时间为每天凌晨一点

1

2

3

4

5

6

7

8

9

10

/**

     * Define the application's command schedule.

     *

     * @param  \Illuminate\Console\Scheduling\Schedule $schedule

     * @return void

     */

    protected function schedule(Schedule $schedule)

    {

        $schedule->command('countIp:day')->dailyAt('1:00');

    }

登录后复制
最后是在 Linux 中添加定时任务,每分钟执行一次 artisan schedule:run,如下
* * * * * /you_php  you_path/artisan schedule:run >> /dev/null 2>&1

以上是laravel任务调度的介绍(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板