このパッケージは、Laravel スケジュールを監視します。スケジュールされたタスクが開始、終了、失敗、またはスキップされるたびに、データベース内のログ テーブルにエントリが書き込まれます。 list
コマンドを使用すると、スケジュールされたタスクがいつ実行されたかを確認できます。
このパッケージでは、Oh Dear とスケジュールを同期することもできます。 Oh Dear は、スケジュールされたタスクが時間通りに実行されないか、失敗するたびに通知を送信します。
私たちはクラス最高のオープンソース パッケージの作成に多くのリソースを投資しています。有料製品のいずれかを購入することで、私たちをサポートできます。
当社のどのパッケージを使用しているかについて、故郷から葉書を送っていただき、誠にありがとうございます。当社の住所は、お問い合わせページに記載されています。受け取ったすべてのポストカードをバーチャル ポストカード ウォールに公開します。
パッケージは、composer 経由でインストールできます。
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
このコマンドは、スケジュールをデータベースと同期する役割を果たします。また、オプションで、ああ、そうです。実稼働環境をデプロイするスクリプトにこのコマンドを追加することを強くお勧めします。
非運用環境では、手動で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
を実行します。このコマンドは、監視されているすべてのスケジュールされたタスクをリストします。スケジュールされたタスクが最後に開始、終了、または失敗したのがいつであるかが表示されます。
パッケージは、スケジュール タスクが開始、終了、失敗、またはスキップされるたびに、データベースの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 トークンとサイト ID が入力されていることを確認する必要があります。これらの値が正しい値を保持していることを確認するには、次のコマンドを実行します。
php artisan schedule-monitor:verify
スケジュールを Oh Dear と同期するには、次のコマンドを実行します。
php artisan schedule-monitor:sync
その後、 list
コマンドを実行すると、アプリ内のすべてのスケジュールされたタスクが Oh Dear に登録されていることが表示されます。
スケジュールされたジョブをできるだけ短くするために、Oh Dear はキューに入れられたジョブを介して ping されます。 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
最近の変更点の詳細については、CHANGELOG を参照してください。
詳細については、「貢献」を参照してください。
セキュリティに関するバグを見つけた場合は、問題トラッカーを使用する代わりに [email protected] にメールを送信してください。
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。