>  기사  >  PHP 프레임워크  >  Laravel 작업 스케줄링 소개(코드 포함)

Laravel 작업 스케줄링 소개(코드 포함)

不言
不言앞으로
2019-04-12 09:52:043158검색

이 글은 라라벨 작업 스케줄링(코드 포함)에 대한 소개입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

소개: 이전에 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 文件;

  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 artisan make:command CountIpDay,新建了 app/Console/Commands/CountIpDay.php 文件;
  2. 设置签名 protected $signature = 'countIp:day'; 和描述 protected $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. 编辑 app/Console/Kernel.php$commands
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\CountIpDay::class,
    ];
  1. 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
  1. 새 리스너에서 Redis의 Set 데이터 유형을 사용하여 사용자의 IP를 기록합니다. 코드는 다음과 같습니다.
rrreee

통계 액세스

🎜위에서 사용자의 IP를 기록한 후 통계 코드를 작성합니다🎜
  1. 새 작업 php artisan make:command CountIpDay를 만들고, 새 앱을 만듭니다/ Console/ Commands/CountIpDay.php 파일;
  2. 서명 설정 protected $signature = 'countIp:day'; 및 설명 protected $description = 'CountIp :day'; IP 접속';
  3. handle 메소드에 코드를 작성하거나 kernel.php에서 <code>emailOutputTo를 사용하세요. code> 이메일을 보내는 방법
rrreee🎜작업 일정 설정🎜
  1. app/Console/Kernel.php 편집 code> >$commands
rrreee
  1. schedule 메소드에 예약된 작업을 설정하고, 실행 시간은 매일 오전 1시입니다
rrreee는 마침내 Linux에 예약된 작업을 추가하고 다음과 같이 artisan Schedule:run을 1분마다 한 번씩 실행합니다.
* * * * * /you_php you_path/ artisan 일정:실행 > /dev/null 2>&1🎜🎜

위 내용은 Laravel 작업 스케줄링 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제