Home >PHP Framework >Laravel >Introduction to laravel task scheduling (with code)

Introduction to laravel task scheduling (with code)

不言
不言forward
2019-04-12 09:52:043224browse

This article brings you an introduction to laravel task scheduling (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Introduction: I have written about using Linux to perform scheduled tasks before. In fact, laravel can also perform scheduled tasks. The requirement is to count the number of IPs visited daily. Although there is data in the data table, for demonstration purposes, create a new listener statistics.

Record IP

This article introduces the implementation of events/listeners and expands on this basis.

Register a new listener and add CreateUserIpLog in the app/Providers/EventServiceProvider.php file

/**
     * 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 记录
        ],
    ];

After the addition is completed, execute php artisan event:generate to create Okapp/Listeners/CreateUserIpLog.php file;

  1. In the new listener, record the user's IP and use Redis's Set data type to record, the code is as follows
/**
     * 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);
        }
    }

Statistical access

The user’s IP is recorded above, and then the statistical code is written

  1. Create a new taskphp artisan make:command CountIpDay , created a new app/Console/Commands/CountIpDay.php file;
  2. Set signatureprotected $signature = 'countIp:day'; and descriptionprotected $description = 'Statistics of daily access IP';
  3. Write code in the handle method, which can also be used in kernel.php emailOutputTo Method to send email
/**
     * 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));
    }

Set task scheduling

  1. Editapp/Console/Kernel.php's$commands
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
  1. Set a scheduled task in the schedule method, and the execution time is one o'clock in the morning every day
/**
     * 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');
    }
finally adds a scheduled task in Linux and executes it once every minute artisan schedule:run, as follows
* * * * * /you_php you_path/artisan schedule:run >> / dev/null 2>&1

The above is the detailed content of Introduction to laravel task scheduling (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete