laravel 任務排程器
阿新 • • 發佈:2021-08-31
背景:
在實際工作業務中,經常要用到非同步任務的方式來進行相關(耗時)任務的處理,這時可能需要採取定時任務的方式來進行。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