Home >PHP Framework >Laravel >Introduction to laravel task scheduling (with code)
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;
/** * 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
php artisan make:command CountIpDay
, created a new app/Console/Commands/CountIpDay.php
file; protected $signature = 'countIp:day';
and descriptionprotected $description = 'Statistics of daily access IP';
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
app/Console/Kernel.php
's$commands
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\CountIpDay::class, ];
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!