這個包將監控你的 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
驗證所有內容是否正確同步。
注意:執行同步命令將刪除您定義的應用程式計畫以外的任何其他 cron 監視器。
如果您想對 Oh Dear 使用非破壞性同步,以便可以監視 Laravel 以外的其他 cron 任務,則可以使用--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,您應該將PingOhDearJob
加入config/multitenancy.php
中的not_tenant_aware_jobs
陣列中。
' 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 將透過排隊作業進行 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
請參閱變更日誌以了解有關最近更改內容的更多資訊。
詳細資訊請參閱貢獻。
如果您發現有關安全的錯誤,請發送郵件至 [email protected],而不是使用問題追蹤器。
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。