Этот пакет будет отслеживать ваше расписание Laravel. Он будет записывать запись в таблицу журнала в базе данных каждый раз, когда задачи расписания запускаются, заканчиваются, завершаются сбоем или пропускаются. С помощью команды list
вы можете проверить, когда запланированные задачи были выполнены.
Этот пакет также может синхронизировать ваше расписание с Oh Dear. Oh Dear отправит вам уведомление, если запланированное задание не запустится вовремя или выйдет из строя.
Мы вкладываем много ресурсов в создание лучших в своем классе пакетов с открытым исходным кодом. Вы можете поддержать нас, купив один из наших платных продуктов.
Мы очень признательны вам за отправку нам открытки из вашего родного города с указанием того, какой из наших пакетов вы используете. Наш адрес вы найдете на странице контактов. Все полученные открытки мы публикуем на нашей виртуальной стене открыток.
Вы можете установить пакет через композитор:
composer require spatie/laravel-schedule-monitor
Если вам нужна поддержка Laravel 8, вы можете установить v2 пакета с помощью composer require spatie/laravel-schedule-monitor:^2
.
Вы должны опубликовать и запустить миграции:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Вы можете опубликовать файл конфигурации с помощью:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Это содержимое опубликованного файла конфигурации:
return [
/*
* The schedule monitor will log each start, finish and failure of all scheduled jobs.
* After a while the `monitored_scheduled_task_log_items` might become big.
* Here you can specify the amount of days log items should be kept.
*
* Use Laravel's pruning command to delete old `MonitoredScheduledTaskLogItem` models.
* More info: https://laravel.com/docs/9.x/eloquent#mass-assignment
*/
' delete_log_items_older_than_days ' => 30 ,
/*
* The date format used for all dates displayed on the output of commands
* provided by this package.
*/
' date_format ' => ' Y-m-d H:i:s ' ,
' models ' => [
/*
* The model you want to use as a MonitoredScheduledTask model needs to extend the
* `SpatieScheduleMonitorModelsMonitoredScheduledTask` Model.
*/
' monitored_scheduled_task ' => Spatie ScheduleMonitor Models MonitoredScheduledTask::class,
/*
* The model you want to use as a MonitoredScheduledTaskLogItem model needs to extend the
* `SpatieScheduleMonitorModelsMonitoredScheduledTaskLogItem` Model.
*/
' monitored_scheduled_log_item ' => Spatie ScheduleMonitor Models MonitoredScheduledTaskLogItem::class,
],
/*
* Oh Dear can notify you via Mail, Slack, SMS, web hooks, ... when a
* scheduled task does not run on time.
*
* More info: https://ohdear.app/cron-checks
*/
' oh_dear ' => [
/*
* You can generate an API token at the Oh Dear user settings screen
*
* https://ohdear.app/user/api-tokens
*/
' api_token ' => env ( ' OH_DEAR_API_TOKEN ' , '' ),
/*
* The id of the site you want to sync the schedule with.
*
* You'll find this id on the settings page of a site at Oh Dear.
*/
' site_id ' => env ( ' OH_DEAR_SITE_ID ' ),
/*
* To keep scheduled jobs as short as possible, Oh Dear will be pinged
* via a queued job. Here you can specify the name of the queue you wish to use.
*/
' queue ' => env ( ' OH_DEAR_QUEUE ' ),
/*
* `PingOhDearJob`s will automatically be skipped if they've been queued for
* longer than the time configured here.
*/
' retry_job_for_minutes ' => 10 ,
],
];
Монитор расписания будет регистрировать каждый запуск, завершение и сбой всех запланированных заданий. Через некоторое время элементы monitored_scheduled_task_log_items
могут стать большими.
Используйте функцию обрезки моделей Laravel, вы можете удалить старые модели MonitoredScheduledTaskLogItem
. Модели старше, чем количество дней, указанное в delete_log_items_older_than_days
в файле конфигурации schedule-monitor
, будут удалены.
// app/Console/Kernel.php
use Spatie ScheduleMonitor Models MonitoredScheduledTaskLogItem ;
class Kernel extends ConsoleKernel
{
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' model:prune ' , [ ' --model ' => MonitoredScheduledTaskLogItem::class])-> daily ();
}
}
Каждый раз, когда вы развертываете свое приложение, вам следует выполнять команду schedule-monitor:sync
php artisan schedule-monitor:sync
Эта команда отвечает за синхронизацию вашего расписания с базой данных и, опционально, «О, дорогой». Мы настоятельно рекомендуем добавить эту команду в сценарий, который развертывает вашу производственную среду.
В непроизводственной среде вам следует вручную запустить schedule-monitor:sync
. Вы можете проверить, все ли синхронизировано правильно, используя schedule-monitor:list
.
Примечание. При выполнении команды синхронизации будут удалены все другие определенные вами мониторы cron, кроме расписания приложения.
Если вы хотите использовать неразрушающую синхронизацию с Oh Dear, чтобы иметь возможность отслеживать другие задачи cron за пределами Laravel, вы можете использовать флаг --keep-old
. Это приведет только к добавлению новых задач в Oh Dear, а не к полной синхронизации. Обратите внимание, что это не приведет к удалению задач из Oh Dear, которых больше нет в вашем расписании.
Чтобы отслеживать свое расписание, вам следует сначала запустить schedule-monitor:sync
. Эта команда просмотрит ваше расписание и создаст запись для каждой задачи в таблице monitored_scheduled_tasks
.
Чтобы просмотреть все отслеживаемые запланированные задачи, вы можете запустить schedule-monitor:list
. Эта команда выведет список всех отслеживаемых запланированных задач. Он покажет вам, когда запланированное задание в последний раз запускалось, завершалось или завершалось неудачно.
Пакет будет записывать запись в таблицу monitored_scheduled_task_log_items
в базе данных каждый раз, когда запланированные задачи запускаются, завершаются, завершаются сбоем или пропускаются. Взгляните на содержимое этой таблицы, если хотите узнать, когда и как выполнялись запланированные задачи. Элементы журнала также содержат другие интересные показатели, такие как использование памяти, время выполнения и многое другое.
Монитор расписания попытается автоматически определить имя запланированной задачи. Для команд это имя команды, для анонимных заданий будет использоваться имя класса первого аргумента. Для некоторых задач, например запланированных закрытий, имя не может быть определено автоматически.
Чтобы вручную задать имя запланированной задачи, вы можете использовать monitorName()
.
Вот пример.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> monitorName ( ' a-custom-name ' );
$ schedule -> call ( fn () => 1 + 1 )-> hourly ()-> monitorName ( ' addition-closure ' );
}
При изменении имени задачи монитор расписания удалит все элементы журнала монитора со старым именем и создаст новый монитор с новым именем задачи.
Когда пакет обнаруживает, что последний запуск запланированной задачи не был выполнен вовремя, в списке schedule-monitor
эта задача будет отображаться с использованием красного цвета фона. На этом снимке экрана задача с именем your-command
выполнена слишком поздно.
Пакет определит, что задача была выполнена слишком поздно, если она не была завершена в то время, когда она должна была выполняться + время отсрочки. Вы можете думать о времени отсрочки как о количестве минут, которое требуется задаче при нормальных обстоятельствах для завершения. По умолчанию пакет предоставляет отсрочку в 5 минут для каждой задачи.
Вы можете настроить время отсрочки, используя метод graceTimeInMinutes
для задачи. В этом примере для задачи your-command
используется льготное время в 10 минут.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Вы можете избежать мониторинга запланированной задачи, включив doNotMonitor
при планировании задачи.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Вы можете сохранить выходные данные, добавив storeOutputInDb
при планировании задачи.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
Вывод будет сохранен в таблице monitored_scheduled_task_log_items
в output
ключе meta
столбца.
Если вы используете spatie/laravel-multitenancy, вам следует добавить PingOhDearJob
в массив not_tenant_aware_jobs
в config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Без этого PingOhDearJob
завершится ошибкой, так как клиент не будет установлен.
Этот пакет может синхронизировать ваше расписание с проверкой cron Oh Dear. Oh Dear отправит вам уведомление, если запланированное задание не завершится вовремя.
Для начала вам сначала необходимо установить Oh Dear SDK.
composer require ohdearapp/ohdear-php-sdk
Затем вам необходимо убедиться, что ключи api_token
и site_id
schedule-monitor
заполнены токеном API и идентификатором сайта «О, дорогой». Чтобы убедиться, что эти значения содержат правильные значения, вы можете запустить эту команду.
php artisan schedule-monitor:verify
Чтобы синхронизировать свое расписание с Oh Dear, выполните следующую команду:
php artisan schedule-monitor:sync
После этого команда list
должна показать, что все запланированные задачи в вашем приложении зарегистрированы в Oh Dear.
Чтобы сделать запланированные задания как можно короче, Oh Dear будет проверяться через задания в очереди. Чтобы обеспечить быструю доставку в Oh Dear и избежать ложных срабатываний, мы настоятельно рекомендуем создать специальную очередь для этих заданий. Вы можете поместить имя этой очереди в ключ queue
файла конфигурации.
Oh Dear будет ждать завершения запланированных задач в течение заданного количества минут. Это называется льготным временем. По умолчанию для всех запланированных задач льготное время составляет 5 минут. Чтобы настроить это значение, вы можете добавить graceTimeInMinutes
к своим запланированным задачам.
Вот пример, когда Oh Dear отправит уведомление, если задача не будет завершена к 00:10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Если вы хотите, чтобы задача отслеживалась монитором расписания, а не Oh Dear, вы можете добавить doMonitorAtOhDear
к своим запланированным задачам.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
В настоящее время этот пакет не работает для задач, использующих следующие методы:
between
unlessBetween
when
skip
Мы предполагаем, что если запланированные задачи не выполняются должным образом, запланированная задача, отправляющая уведомления, вероятно, также не будет запущена. Вот почему этот пакет не отправляет уведомления сам по себе.
Эти службы могут уведомлять вас, когда запланированные задачи не выполняются должным образом:
composer test
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Если вы обнаружили ошибку, связанную с безопасностью, отправьте электронное письмо по адресу [email protected] вместо использования системы отслеживания проблем.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.