Task Scheduler у Laravel пропонує елегантне рішення для управління автоматизованими процесами у вашій програмі. Ця потужна система замінює традиційне управління cron-роботами, надаючи виразний і програматичний підхід до автоматизації повторюваних завдань.
Запланування завдань розпочинається у файлі вашого додатка app/Console/Kernel.php
. Ось як налаштувати автоматизовані завдання:
protected function schedule(Schedule $schedule)
{
$schedule->command('reports:generate-monthly')
->monthly()
->firstDayOfMonth()
->at('09:00')
->timezone('Europe/London');
}
Ця конфігурація виконує команду генерації щомісячного звіту в перший день кожного місяця о 9:00 за лондонським часом.
Laravel надає різноманітні варіанти запуску для різних потреб автоматизації:
$schedule->command('cache:clear')->everyFiveMinutes();
$schedule->command('backup:create')->dailyAt('02:00');
$schedule->command('analytics:process')->weekly()->sundays();
$schedule->command('maintenance:check')->weekdays()->hourlyAt(30);
$schedule->command('logs:cleanup')->monthlyOn(15, '03:00');
Для складніших потреб ви можете використовувати cron-вирази:
$schedule->command('custom:process')->cron('*/15 * * * *'); // Кожні 15 хвилин
Ви можете ефективно контролювати результати виконання завдань:
$schedule->command('data:import')
->daily()
->appendOutputTo(storage_path('logs/imports.log'))
->emailOutputOnFailure('ops@company.com');
Цей підхід фіксує всі активності імпорту та надсилає сповіщення лише у разі збоїв.
Запобігання конфліктам ресурсів і забезпечення правильної координації завдань стає простим завдяки контролю виконання в Laravel:
$schedule->command('processing:heavy')
->daily()
->withoutOverlapping(30);
Для розподілених систем ви можете забезпечити виконання на одному сервері:
$schedule->command('sync:external-data')
->hourly()
->onOneServer()
->runInBackground();
Завдання можна налаштувати на виконання лише в необхідних середовищах:
$schedule->command('notifications:send')
->daily()
->environments(['production', 'staging'])
->evenInMaintenanceMode();
Ось комплексна служба планування, що ілюструє практичні шаблони автоматизації:
class AutomationScheduler
{
public function configureSchedules(Schedule $schedule)
{
$this->setupDatabaseMaintenance($schedule);
$this->configureReportGeneration($schedule);
$this->scheduleHealthChecks($schedule);
$this->manageFileCleanup($schedule);
}
private function setupDatabaseMaintenance(Schedule $schedule)
{
$schedule->command('model:prune')
->daily()
->at('01:00')
->onOneServer()
->before(function () {
Log::info('Початок очищення бази даних');
})
->after(function () {
Log::info('Очищення бази даних завершено');
});
}
private function configureReportGeneration(Schedule $schedule)
{
$schedule->command('reports:daily-summary')
->dailyAt('08:00')
->weekdays()
->timezone('America/New_York')
->when(function () {
return Config::get('reports.enabled');
});
$schedule->command('reports:weekly-analytics')
->weekly()
->mondays()
->at('07:00')
->sendOutputTo(storage_path('logs/weekly-reports.log'));
}
private function scheduleHealthChecks(Schedule $schedule)
{
$schedule->call(function () {
$this->performSystemHealthCheck();
})
->everyTenMinutes()
->runInBackground()
->pingOnFailure('https://monitoring.service.com/alert');
}
private function manageFileCleanup(Schedule $schedule)
{
$schedule->command('storage:cleanup')
->daily()
->at('03:00')
->unlessBetween('08:00', '18:00')
->environments(['production']);
}
}
Ви можете реалізувати складний контроль робочого процесу з використанням хуків перед і після виконання:
$schedule->command('data:sync')
->hourly()
->before(function () {
Cache::put('sync_started', now());
})
->onSuccess(function () {
Cache::forget('sync_started');
Cache::put('last_sync', now());
})
->onFailure(function () {
Cache::put('sync_failed', now());
});
Scheduler у Laravel безпечно інтегрується з зовнішніми службами моніторингу:
$schedule->command('critical:backup')
->daily()
->at('23:00')
->pingBefore('https://beats.service.com/start/backup-xyz')
->thenPing('https://beats.service.com/complete/backup-xyz');
Task Scheduler у Laravel перетворює автоматизацію програми з ручного управління cron на елегантну, зручну систему, що безперешкодно інтегрується з вашою логікою програми та інфраструктурою моніторингу