首頁  >  文章  >  php框架  >  laravel任務調度的介紹(附程式碼)

laravel任務調度的介紹(附程式碼)

不言
不言轉載
2019-04-12 09:52:043175瀏覽

這篇文章帶給大家的內容是關於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 檔案;

  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 >> /gt;> / dev/null 2>&1

以上是laravel任務調度的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除