1. 程式人生 > 其它 >laravel 任務排程器

laravel 任務排程器

背景:
在實際工作業務中,經常要用到非同步任務的方式來進行相關(耗時)任務的處理,這時可能需要採取定時任務的方式來進行。linux自帶的crontab定時器工具能很好的解決這個問題。
每次專案上線的時候,如有新的非同步任務指令碼就必定要×××器管理員進行crontab配置修改。因為需要動伺服器配置,溝通協調確認的過程都避免不了。
laravel自帶的schedule任務排程能很好解決這個痛點。

laravel任務排程

php artisan schedule:run

實現步驟

1、crontab -e 增加定時執行laravel任務排程

#每分鐘執行一次laravel任務排程,注意專案的絕對路徑必須寫正確。
* * * * * * php /site-path/artisan schedule:run >> /dev/null 2>&1

手動執行排程測試:

php artisan schedule:run

2、增加artisan Command命令列指令碼檔案

不做具體介紹,請參照官方文件

3、在Console核心中註冊新建的命令列指令碼檔案資訊

console核心檔案/app/Console/Kernel.php
protected $commands = [
        "App\\Console\\Commands\\MigrateCompanyDataCommand",//
遷移代記賬公司資料到物件表 "App\\Console\\Commands\\ReportCustomerSettleAccountEventCommand",//上報帳套結帳事件 "App\\Console\\Commands\\IndicatorComputeCommand",//指標計算 ];

4、配置排程資訊

在排程配置中增加相關command任務的執行頻率即可完成定時任務部署。

protected function schedule(Schedule $schedule)
    {
         $schedule->command('command任務檔案signature')->hourly();
    }

5、關於執行頻率

參照:Illuminate\Console\Scheduling\ManagesFrequencies

排程常用選項
->cron(‘* * * * *’);在自定義Cron排程上執行任務

->everyMinute();每分鐘執行一次任務

->everyFiveMinutes();每五分鐘執行一次任務

->everyTenMinutes();每十分鐘執行一次任務

->everyThirtyMinutes();每三十分鐘執行一次任務

->hourly();每小時執行一次任務

->daily();每天凌晨零點執行任務

->dailyAt(‘13:00’);每天13:00執行任務

->twiceDaily(1, 13);每天1:00 & 13:00執行任務

->weekly();每週執行一次任務

->monthly();每月執行一次任務

->monthlyOn(4, ‘15:00’);每月4號15:00執行一次任務

->quarterly();每個季度執行一次

->yearly();每年執行一次

->timezone(‘America/New_York’);設定時區

->weekdays();只在工作日執行任務

->sundays();每個星期天執行任務

->mondays();每個星期一執行任務

->tuesdays();每個星期二執行任務

->wednesdays();每個星期三執行任務

->thursdays();每個星期四執行任務

->fridays();每個星期五執行任務

->saturdays();每個星期六執行任務

->between($start, $end);基於特定時間段執行任務

->when(Closure);基於特定測試執行任務

https://blog.51cto.com/phpme/2400997