這篇文章帶給大家的內容是關於laravel任務調度的介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
導語:之前寫過使用 Linux 的進行定時任務,實際上 laravel 也可以執行定時任務。需求是統計每日存取的 IP 數,雖然數據表中有數據,為了演示,新建監聽器統計。
記錄 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
檔案;
/** * 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
,如下
以上是laravel任務調度的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!