Giao diện
Lập lịch (Task Scheduling)
Giới thiệu (Introduction)
Trước đây để lập lịch tác vụ, bạn phải tạo cron entry cho mỗi task trên server. Laravel Scheduler cho phép định nghĩa command schedule ngay trong Laravel — chỉ cần một cron entry duy nhất trên server:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1Định nghĩa Schedules
Trong routes/console.php:
php
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send Taylor --force')->daily();Closure Schedules
php
Schedule::call(function () {
DB::table('recent_users')->delete();
})->daily();Artisan Commands
php
Schedule::command('emails:send Taylor --force')->daily();
Schedule::command(EmailsCommand::class, ['Taylor', '--force'])->daily();Queued Jobs
php
use App\Jobs\Heartbeat;
Schedule::job(new Heartbeat)->everyFiveMinutes();
Schedule::job(new Heartbeat, 'heartbeats', 'sqs')->everyFiveMinutes();Shell Commands
php
Schedule::exec('node /home/forge/script.js')->daily();Tần suất (Frequency Options)
| Method | Mô tả |
|---|---|
->cron('* * * * *') | Custom cron expression |
->everySecond() | Mỗi giây |
->everyMinute() | Mỗi phút |
->everyTwoMinutes() | Mỗi 2 phút |
->everyFiveMinutes() | Mỗi 5 phút |
->everyTenMinutes() | Mỗi 10 phút |
->everyFifteenMinutes() | Mỗi 15 phút |
->everyThirtyMinutes() | Mỗi 30 phút |
->hourly() | Mỗi giờ |
->daily() | Mỗi ngày lúc nửa đêm |
->dailyAt('13:00') | Mỗi ngày lúc 13:00 |
->twiceDaily(1, 13) | Mỗi ngày lúc 1:00 và 13:00 |
->weekly() | Mỗi tuần |
->monthly() | Mỗi tháng |
->quarterly() | Mỗi quý |
->yearly() | Mỗi năm |
Ràng buộc (Constraints)
php
Schedule::command('emails:send')
->hourly()
->weekdays() // Chỉ ngày trong tuần
->between('8:00', '17:00'); // Chỉ 8h-17h
Schedule::command('emails:send')
->hourly()
->unlessBetween('23:00', '4:00'); // Trừ 23h-4h
Schedule::command('emails:send')
->daily()
->environments(['staging', 'production']);Ngăn chồng chéo (Preventing Overlaps)
php
Schedule::command('emails:send')->withoutOverlapping();
// Với thời gian lock hết hạn
Schedule::command('emails:send')->withoutOverlapping(10); // 10 phútChạy trên một Server (Running on One Server)
php
Schedule::command('report:generate')
->fridays()
->at('17:00')
->onOneServer();Background Tasks
php
Schedule::command('analytics:report')
->daily()
->runInBackground();Maintenance Mode
php
Schedule::command('emails:send')->evenInMaintenanceMode();Chạy Scheduler
Development
bash
php artisan schedule:workXem danh sách scheduled tasks
bash
php artisan schedule:listOutput
php
Schedule::command('emails:send')
->daily()
->sendOutputTo($filePath);
Schedule::command('emails:send')
->daily()
->appendOutputTo($filePath);
Schedule::command('emails:send')
->daily()
->emailOutputTo('taylor@example.com');Task Hooks
php
Schedule::command('emails:send')
->daily()
->before(function () {
// Trước khi task chạy...
})
->after(function () {
// Sau khi task chạy...
})
->onSuccess(function () {
// Task thành công...
})
->onFailure(function () {
// Task thất bại...
});Ping URLs
php
Schedule::command('emails:send')
->daily()
->pingBefore($url)
->thenPing($url)
->pingOnSuccess($successUrl)
->pingOnFailure($failUrl);