이 글은 라라벨 작업 스케줄링(코드 포함)에 대한 소개입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
소개: 이전에 Linux를 사용하여 예약된 작업을 수행하는 방법에 대해 쓴 적이 있습니다. 실제로 laravel도 예약된 작업을 수행할 수 있습니다. 요구 사항은 매일 방문한 IP 수를 계산하는 것입니다. 데이터 테이블에 데이터가 있지만 데모 목적으로 새 수신기 통계를 만듭니다.
Record IP
이 글에서는 이벤트/리스너의 구현을 소개하고 이를 기반으로 확장합니다.
새 리스너를 등록하고 app/Providers/EventServiceProvider.php 파일에 CreateUserIpLog를 추가하세요
/** * 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
파일; php artisan event:generate
,创建好了 app/Listeners/CreateUserIpLog.php
文件;
/** * 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 记录下来,然后就是编写统计代码
php artisan make:command CountIpDay
,新建了 app/Console/Commands/CountIpDay.php
文件;protected $signature = 'countIp:day';
和描述 protected $description = '统计每日访问 IP';
handle
方法中编写代码,也可以在 kernel.php
中使用 emailOutputTo
方法发送邮件/** * 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)); }
设置任务调度
app/Console/Kernel.php
的 $commands
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\CountIpDay::class, ];
schedule
方法中设置定时任务,执行时间为每天凌晨一点/** * 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
통계 액세스
🎜위에서 사용자의 IP를 기록한 후 통계 코드를 작성합니다🎜php artisan make:command CountIpDay
를 만들고, 새 앱을 만듭니다/ Console/ Commands/CountIpDay.php
파일;protected $signature = 'countIp:day';
및 설명 protected $description = 'CountIp :day'; IP 접속';
handle
메소드에 코드를 작성하거나 kernel.php에서 <code>emailOutputTo
를 사용하세요. code> 이메일을 보내는 방법app/Console/Kernel.php 편집 code> >$commands
schedule
메소드에 예약된 작업을 설정하고, 실행 시간은 매일 오전 1시입니다artisan Schedule:run
을 1분마다 한 번씩 실행합니다.* * * * * /you_php you_path/ artisan 일정:실행 > /dev/null 2>&1
🎜🎜위 내용은 Laravel 작업 스케줄링 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!