Метод monthly
Метод monthly класса Schedule определяет, что задача должна выполняться по расписанию один раз в месяц. Этот метод используется внутри файла app/Console/Kernel.php для настройки периодического выполнения команд, заданий или замыканий. Метод не принимает параметров и возвращает тот же объект Event для дальнейшей цепочки методов.
Синтаксис
<?php
protected function schedule(Schedule $schedule)
{
$schedule->command('command:name')->monthly();
$schedule->job(new JobClass)->monthly();
$schedule->call(function() {
// code
})->monthly();
}
?>
Пример
Давайте настроим выполнение команды очистки временных файлов каждый месяц:
<?php
namespace AppConsole;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('cleanup:temp')->monthly();
}
}
?>
Пример
Давайте создадим задание для отправки ежемесячного отчёта:
<?php
namespace AppConsole;
use AppJobsGenerateReport;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->job(new GenerateReport())->monthly();
}
}
?>
Пример
Давайте настроим ежемесячное выполнение замыкания для расчёта статистики:
<?php
namespace AppConsole;
use AppModelsUser;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->call(function() {
$count = User::where('active', true)->count();
\Log::info("Active users count: " . $count);
})->monthly();
}
}
?>
Результат выполнения кода:
"Active users count: 150"
Пример
Давайте настроим задачу с использованием дополнительных методов, таких как timezone и withoutOverlapping:
<?php
namespace AppConsole;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('backup:run')
->monthly()
->timezone('Europe/Moscow')
->withoutOverlapping();
}
}
?>