이 패키지는 Laravel 일정을 모니터링합니다. 일정 작업이 시작, 종료, 실패하거나 건너뛸 때마다 db의 로그 테이블에 항목을 기록합니다. list
명령을 사용하면 예약된 작업이 언제 실행되었는지 확인할 수 있습니다.
이 패키지는 Oh Dear와 일정을 동기화할 수도 있습니다. Oh Dear는 예약된 작업이 제 시간에 실행되지 않거나 실패할 때마다 알림을 보내드립니다.
우리는 동급 최고의 오픈 소스 패키지를 만드는 데 많은 리소스를 투자합니다. 유료 제품 중 하나를 구매하여 우리를 지원할 수 있습니다.
귀하가 사용하고 있는 당사 패키지를 언급하면서 귀하의 고향에서 엽서를 보내주셔서 진심으로 감사드립니다. 연락처 페이지에서 주소를 확인하실 수 있습니다. 우리는 수신된 모든 엽서를 가상 엽서 월에 게시합니다.
작곡가를 통해 패키지를 설치할 수 있습니다.
composer require spatie/laravel-schedule-monitor
Laravel 8 지원이 필요한 경우, composer require spatie/laravel-schedule-monitor:^2
사용하여 패키지 v2를 설치할 수 있습니다.
마이그레이션을 게시하고 실행해야 합니다.
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
모델을 삭제할 수 있습니다. schedule-monitor
구성 파일의 delete_log_items_older_than_days
에 구성된 일수보다 오래된 모델은 삭제됩니다.
// 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
이 명령은 일정을 데이터베이스와 동기화하는 역할을 하며 선택적으로 Oh Dear. 프로덕션 환경을 배포하는 스크립트에 이 명령을 추가하는 것이 좋습니다.
비프로덕션 환경에서는 수동으로 schedule-monitor:sync
실행해야 합니다. schedule-monitor:list
사용하여 모든 것이 올바르게 동기화되었는지 확인할 수 있습니다.
참고: sync 명령을 실행하면 애플리케이션 일정 외에 정의한 다른 cron 모니터가 제거됩니다.
Laravel 외부의 다른 cron 작업을 모니터링할 수 있도록 Oh Dear에 비파괴적인 동기화를 사용하려면 --keep-old
플래그를 사용할 수 있습니다. 이렇게 하면 전체 동기화가 아닌 새 작업만 Oh Dear로 푸시됩니다. 더 이상 일정에 없는 Oh Dear의 작업은 제거되지 않습니다.
일정을 모니터링하려면 먼저 schedule-monitor:sync
실행해야 합니다. 이 명령은 일정을 살펴보고 monitored_scheduled_tasks
테이블의 각 작업에 대한 항목을 생성합니다.
모니터링되는 모든 예약 작업을 보려면 schedule-monitor:list
실행할 수 있습니다. 이 명령은 모니터링되는 모든 예약된 작업을 나열합니다. 예약된 작업이 마지막으로 시작, 완료 또는 실패한 시기를 표시합니다.
패키지는 일정 작업이 시작, 종료, 실패하거나 건너뛸 때마다 db의 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
테이블의 meta
열 output
키에 저장됩니다.
spatie/laravel-multitenancy를 사용하는 경우 config/multitenancy.php
의 not_tenant_aware_jobs
배열에 PingOhDearJob
추가해야 합니다.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
이것이 없으면 테넌트가 설정되지 않으므로 PingOhDearJob
이 실패합니다.
이 패키지는 귀하의 일정을 Oh Dear cron 확인과 동기화할 수 있습니다. Oh Dear는 예정된 작업이 제 시간에 완료되지 않을 때마다 알림을 보내드립니다.
시작하려면 먼저 Oh Dear SDK를 설치해야 합니다.
composer require ohdearapp/ohdear-php-sdk
다음으로, schedule-monitor
의 api_token
및 site_id
키가 API 토큰과 Oh Dear 사이트 ID로 채워져 있는지 확인해야 합니다. 이러한 값이 올바른 값을 갖고 있는지 확인하려면 이 명령을 실행할 수 있습니다.
php artisan schedule-monitor:verify
Oh Dear와 일정을 동기화하려면 다음 명령을 실행하세요.
php artisan schedule-monitor:sync
그런 다음 list
명령은 앱의 모든 예약된 작업이 Oh Dear에 등록되어 있음을 표시해야 합니다.
예약된 작업을 최대한 짧게 유지하기 위해 Oh Dear는 대기 중인 작업을 통해 핑을 보냅니다. Oh Dear에게 빠르게 전달하고 잘못된 긍정 알림을 방지하려면 이러한 작업에 대한 전용 대기열을 만드는 것이 좋습니다. 구성 파일의 queue
키에 해당 대기열의 이름을 넣을 수 있습니다.
Oh Dear는 일정 시간 동안 일정 작업이 완료될 때까지 기다립니다. 이것을 은혜의 시간이라고 합니다. 기본적으로 모든 예약된 작업의 유예 시간은 5분입니다. 이 값을 사용자 정의하려면 graceTimeInMinutes
예약된 작업에 추가하면 됩니다.
다음은 작업이 00:10까지 완료되지 않으면 Oh Dear가 알림을 보내는 예입니다.
// 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
최근 변경된 사항에 대한 자세한 내용은 변경 로그를 참조하세요.
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 버그를 발견한 경우 이슈 트래커를 사용하는 대신 [email protected]로 메일을 보내주세요.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.