1. 程式人生 > >Laravel框架在ubuntu下的定時任務【過期訂單自動關閉】

Laravel框架在ubuntu下的定時任務【過期訂單自動關閉】

轉載了原作者的文章並結合自己的理解有所修改。

Ubuntu 下,命令列輸入  

crontab -e

 打開了一個檔案  然後在最後加入  這技術定時器,

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

然後我們重啟了服務 

 service cron restart

下面是在laravel檔案下的編寫

app/Console/Kernel.php【上面的定時好了之後我們就測試了一下定時向日志中新增語句,並且是每分鐘執行一次】  

protected function schedule(Schedule $schedule)
{
        $schedule->call(function () {
            Log::info('ccc');
        })->everyMinute();
}

示例,自動處理過期訂單

Order.php

    public static function handle_expired_order() {
        $orders = self::where('status', self::STATUS_NEW)
            ->whereRaw("created_at < NOW() - INTERVAL 1 DAY")
            ->get();

        foreach ($orders as $order) {
            $order->status = self::STATUS_EXPIRED;
            $order->save();
        }
    }

app/Console/Kernel.php

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            Order::handle_expired_order();
        })->hourly();
    }

每小時執行

->hourly();

本地除錯的時候,最好改成

->everyMinute();

方便檢視效果。

當存在兩個定時任務時需要 分開寫  

protected function schedule(Schedule $schedule){
            第一個定時任務 $schedule->call(function () { Log::info('ccc');         })         第二個定時任務
        $schedule->call(function () {            Log::info('哎哎哎');          }) 
})->everyMinute();}

方便檢視效果。