Рубрики
Uncategorized

Пример планирования задач Laravel

Автор оригинала: David Wong.

Представил

Я уже писал об использовании Linux для задач синхронизации раньше. На самом деле, laravel также может выполнять задачи синхронизации. Требование состоит в том, чтобы подсчитать количество IP-обращений в день, хотя в таблице данных есть данные. Для демонстрации создается новая статистика прослушивателей.

Запись IP

Эта статья знакомит с реализацией события/прослушивателя и расширяет ее.

  1. Зарегистрируйте нового слушателя в app/Провайдеры/EventServiceProvider. php Новые дополнения к файлам Создание журнала Ip-адресов пользователей
/**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        'App\Events\UserBrowse' => [
            'App Listeners CreateBrowseLog', // User Access Records
            'App Listeners CreateUserIpLog', // User IP Records
        ],
    ];

Выполнение после завершения добавления событие php artisan:сгенерировать Он создан. app/Listeners/CreateUserIpLog.php Документы;

  1. В новом прослушивателе запишите IP-адрес пользователя и используйте для записи установленный тип данных Redis. Код выглядит следующим образом
/**
     * Handle the event.
     * Recording User 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 does not exist, indicating that it is the first time to store it that day, setting the expiration time for three days
            $redis->expire($redisKey, 259200);
        }
    }

Статистический доступ

Он записывает IP-адрес пользователя, а затем записывает код статистики.

  1. Создайте новую задачу php artisan make:количество команд в день Ip Это что-то новенькое. app/Console/Commands/CountIpDay.php Документы;
  2. Установите подпись защищено; И описание Защищено;
  3. останься справься Вы также можете написать код в kernel.php Использовать в Вывод электронной почты В Способ отправки почты
/**
     * 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.'The total number of IP accesses is'. $redis - > scard ($redisKey);

        // Send mail
        Mail::to(env('ADMIN_EMAIL'))->send(new SendSystemInfo($data));
    }

Настройка планирования задач

  1. редактировать app/Console/Kernel.php Из $команд
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
  1. пребывание расписание Метод устанавливает задачу по времени для выполнения в 1:00 утра каждый день.
/**
     * 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');
    }
  1. Наконец, добавьте временную задачу в Linux и выполняйте ее каждую минуту. расписание ремесленника:выполнить Следующим образом * * * * */you_php ваш_пут/расписание ремесленника:выполнить >>/dev/null 2>&1

Справочный материал: планирование задач laravel, примеры планирования задач по времени Laravel – статистика количества новых пользователей в неделю