この記事では、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 记录 ], ];
追加が完了したら、phpArtisanevent:generate
を実行して作成します。 Okapp/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 職人が作成します:コマンド CountIpDay
、新しい app/Console/Commands/CountIpDay.php
ファイルを作成しました; protected $signature = 'countIp:day';
および descriptionprotected $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
's$commands
/** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ \App\Console\Commands\CountIpDay::class, ];
schedule
メソッドでスケジュールされたタスクを設定すると、実行時間は毎日午前 1 時 /** * 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'); }
artisan スケジュール:run
のように実行します。* * * * * /you_php you_path/artisan スケジュール:run >> / dev/null 2>&1
以上がlaravelタスクスケジューリングの紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。