Cron Component
Компонент triangle/cron предоставляет планировщик задач (cron-задач) для выполнения периодических задач.
Установка
composer require triangle/cron
Конфигурация
Задачи определяются в config/cron.php:
return [
[
'name' => 'CleanOldSessions',
'schedule' => '0 0 * * *', // Каждый день в полночь
'task' => \App\Tasks\CleanOldSessions::class,
],
[
'name' => 'SendReports',
'schedule' => '0 9 * * 1', // Каждый понедельник в 9:00
'task' => \App\Tasks\SendReports::class,
],
];
Формат расписания (Cron Expression)
Cron-выражение состоит из 5 полей:
* * * * *
│ │ │ │ │
│ │ │ │ └─── День недели (0-7, где 0 и 7 = воскресенье)
│ │ │ └───── Месяц (1-12)
│ │ └─────── День месяца (1-31)
│ └───────── Час (0-23)
└─────────── Минута (0-59)
Примеры
'0 0 * * *' // Каждый день в полночь
'0 9 * * 1' // Каждый понедельник в 9:00
'*/5 * * * *' // Каждые 5 минут
'0 0 1 * *' // Первое число каждого месяца
'0 0 * * 0' // Каждое воскресенье
Создание задачи
<?php
namespace App\Tasks;
use Triangle\Cron\TaskInterface;
class CleanOldSessions implements TaskInterface
{
public function execute()
{
// Удаление старых сессий
$deleted = DB::table('sessions')
->where('created_at', '<', now()->subDays(30))
->delete();
echo "Deleted {$deleted} old sessions\n";
}
}
Запуск планировщика
Планировщик запускается автоматически при старте приложения, если компонент Cron установлен и настроен.
Для ручного запуска задач:
php master cron:run
Интеграция с событиями
Задачи могут генерировать события:
<?php
namespace App\Tasks;
use App\Events\DailyReportGenerated;
use Triangle\Cron\TaskInterface;
use Triangle\Events\Event;
class GenerateDailyReport implements TaskInterface
{
public function execute()
{
$report = $this->generateReport();
Event::dispatch(new DailyReportGenerated($report));
}
}
Логирование
Результаты выполнения задач логируются:
// config/log.php
return [
'channels' => [
'cron' => [
'driver' => 'file',
'path' => runtime_path('logs/cron.log'),
],
],
];