laravelタスクスケジューリングの紹介(コード付き)

不言
リリース: 2019-04-12 09:52:04
転載
3185 人が閲覧しました

この記事では、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 ファイル;

  1. 新しいリスナーでユーザーの IP を記録し、Redis の Set データ型を使用して記録します。コードは次のとおりです
/**
     * 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 が上に記録され、統計コードが書き込まれます

  1. 新しいタスクを作成しますphp 職人が作成します:コマンド CountIpDay 、新しい app/Console/Commands/CountIpDay.php ファイルを作成しました;
  2. 署名を設定protected $signature = 'countIp:day';および descriptionprotected $description = '毎日のアクセス IP の統計';
  3. 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));
    }
ログイン後にコピー

タスクのスケジュール設定

  1. Editapp/Console /Kernel.php's$commands
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
ログイン後にコピー
  1. 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');
    }
ログイン後にコピー
は最終的に Linux にスケジュールされたタスクを追加し、それを 1 分ごとに artisan スケジュール:run のように実行します。
* * * * * /you_php you_path/artisan スケジュール:run >> / dev/null 2>&1

以上がlaravelタスクスケジューリングの紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート