Управління виводом запланованих задач у Laravel

Треба відслідковувати виведення запланованих завдань? Планувальник Laravel надає елегантні методи для збереження та зберігання виведення команд для подальшого перегляду.

Основне використання

Зберегти виведення команди у файл:

use Illuminate\Support\Facades\Schedule;  

// Зберегти виведення у файл  
Schedule::command('emails:send')  
 ->daily()  
 ->sendOutputTo($filePath);  
// Додати виведення до існуючого файлу  
Schedule::command('emails:send')  
 ->daily()  
 ->appendOutputTo($filePath);

Приклад з реального світу

Ось як можна реалізувати повне логування виведення завдань:

class TaskScheduler  
{  
 protected $outputPath = 'storage/logs/scheduled-tasks';  

 public function registerTasks()  
 {  
 // Резервне копіювання бази даних з логуванням виведення  
 Schedule::command('backup:run')  
 ->daily()  
 ->at('01:00')  
 ->appendOutputTo($this->getLogPath('backup'))  
 ->before(function () {  
 Log::info('Запуск резервного копіювання бази даних...');  
 })  
 ->after(function () {  
 Log::info('Процес резервного копіювання завершено');  
 });  
 // Генерація звітів з окремими логами  
 Schedule::command('reports:generate')  
 ->weekly()  
 ->mondays()  
 ->at('07:00')  
 ->sendOutputTo($this->getLogPath('reports'));  
 // Очищення старих логів щотижня  
 Schedule::call(function () {  
 $this->cleanOldLogs();  
 })->weekly();  
 }  

 protected function getLogPath($task)  
 {  
 $date = now()->format('Y-m-d');  
 return storage_path(  
 "logs/scheduled-tasks/{$task}-{$date}.log"  
 );  
 }  

 protected function cleanOldLogs()  
 {  
 $files = File::files($this->outputPath);  

 foreach ($files as $file) {  
 $age = now()->diffInDays(File::lastModified($file));  

 if ($age > 30) {  
 File::delete($file);  
 }  
 }  
 }  
}

Ці методи обробки виведення спрощують відстеження та налагодження ваших запланованих завдань.

Якщо цей посібник був корисним для вас, підпишіться на мій щоденний бюлетень та слідкуйте за мною в X/Twitter і Bluesky.
Це дуже допомагає!

Перекладено з: Managing Scheduled Task Output in Laravel

Leave a Reply

Your email address will not be published. Required fields are marked *