iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
自我挑戰組

Laravel 實戰經驗分享系列 第 22

Laravel 實戰經驗分享 - Day22 定期排程,每天都該做的事就交給它!

  • 分享至 

  • xImage
  •  

今天來跟大家分享排程的經驗,在很多的專案中,有些需要定時工作的項目如爬資料、定時更新/刪除檔案,就會交由定期排程來實作。

crontab 設定

在這個實作中,我們是以 Linux 為開發主機,因此我們先進入 crontab 的編輯畫面內。

crontab -e

再輸入以下內容即可定期執行 Laravel 的排程任務

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

並至 app/Console/Kernel.php 內即可進行排程工作囉!

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        DB::table('everyday')->insert([
            ['today' => date('Y-m-d H:i:s')]
        ]);
    })->daily();
}

自訂 Console

Laravel 也有自訂 command line 的方式,就是用 Artisan 實作的,平常用慣了,想要自己做一個專屬的指令,也可以在這裡做給你。

產生 command 檔

php artisan make:command PrintLog

接下來我們就到 app/Console/Commands/PrintLog.php 內新增程式碼

class PrintLog extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'print:log';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'print system log';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $this->info('現在時間: ' . now()->toDateTimeString());
    }
}

$signature 為這個指令的呼叫名稱,也可以在後面放入變數。
handle 為這個指令需要做的工作。

你也可以在這邊引用其他的方法,或是將 Model 或是 Controller 引用近來透過指令進行操作,不過如果是包成指令,還是建議以需要排程的狀況再進行使用即可。

我們先試跑這個已經做完的指令。

php artisan print:log

這個時候就可以到 Kernel.php 內排定這個指令的時間了。

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        DB::table('recent_users')->delete();
    })->daily();
    $schedule->command('print:log')
                ->everyMinute();
}

這樣每分鐘就會執行這個指令一次了,如果你在設計系統的時候需要定期排程更新或刪除檔案,都可以利用這個方式,將所有動作包裝成指令,再進行排程工作,都非常的方便。


上一篇
Laravel 實戰經驗分享 - Day21 Laravel File Storage
下一篇
Laravel 實戰經驗分享 - Day23 別再用 FTP 了,Gitlab CI 的簡單部署教學
系列文
Laravel 實戰經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言