Paket ini akan memantau jadwal Laravel Anda. Ini akan menulis entri ke tabel log di db setiap kali tugas jadwal dimulai, berakhir, gagal atau dilewati. Dengan menggunakan perintah list
Anda dapat memeriksa kapan tugas yang dijadwalkan telah dijalankan.
Paket ini juga dapat menyinkronkan jadwal Anda dengan Oh Dear. Oh Dear akan mengirimi Anda pemberitahuan setiap kali tugas yang dijadwalkan tidak berjalan tepat waktu atau gagal.
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Anda dapat menginstal paket melalui composer:
composer require spatie/laravel-schedule-monitor
Jika Anda memerlukan dukungan Laravel 8, Anda dapat menginstal paket v2 menggunakan composer require spatie/laravel-schedule-monitor:^2
.
Anda harus memublikasikan dan menjalankan migrasi:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-migrations "
php artisan migrate
Anda dapat mempublikasikan file konfigurasi dengan:
php artisan vendor:publish --provider= " SpatieScheduleMonitorScheduleMonitorServiceProvider " --tag= " schedule-monitor-config "
Ini adalah isi file konfigurasi yang dipublikasikan:
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 ,
],
];
Monitor jadwal akan mencatat setiap permulaan, penyelesaian dan kegagalan semua pekerjaan yang dijadwalkan. Setelah beberapa saat, monitored_scheduled_task_log_items
mungkin menjadi besar.
Gunakan fitur pemangkasan model Laravel, Anda dapat menghapus model MonitoredScheduledTaskLogItem
lama. Model yang lebih lama dari jumlah hari yang dikonfigurasi di delete_log_items_older_than_days
di file konfigurasi schedule-monitor
, akan dihapus.
// 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 ();
}
}
Setiap kali Anda men-deploy aplikasi, Anda harus menjalankan perintah schedule-monitor:sync
php artisan schedule-monitor:sync
Perintah ini bertanggung jawab untuk menyinkronkan jadwal Anda dengan database, dan opsional Ya ampun. Kami sangat menyarankan untuk menambahkan perintah ini ke skrip yang menyebarkan lingkungan produksi Anda.
Di lingkungan non-produksi, Anda harus menjalankan schedule-monitor:sync
secara manual. Anda dapat memverifikasi apakah semuanya disinkronkan dengan benar menggunakan schedule-monitor:list
.
Catatan: Menjalankan perintah sinkronisasi akan menghapus monitor cron lain yang telah Anda tetapkan selain jadwal aplikasi.
Jika Anda ingin menggunakan sinkronisasi non-destruktif ke Oh Dear sehingga Anda dapat memantau tugas cron lain di luar Laravel, Anda dapat menggunakan flag --keep-old
. Ini hanya akan mendorong tugas baru ke Oh Dear, bukan sinkronisasi penuh. Perhatikan bahwa ini tidak akan menghapus tugas apa pun dari Oh Dear yang tidak lagi ada dalam jadwal Anda.
Untuk memantau jadwal Anda, Anda harus menjalankan schedule-monitor:sync
terlebih dahulu. Perintah ini akan melihat jadwal Anda dan membuat entri untuk setiap tugas di tabel monitored_scheduled_tasks
.
Untuk melihat semua tugas terjadwal yang dipantau, Anda dapat menjalankan schedule-monitor:list
. Perintah ini akan mencantumkan semua tugas terjadwal yang dipantau. Ini akan menunjukkan kepada Anda kapan tugas terjadwal terakhir kali dimulai, selesai, atau gagal.
Paket akan menulis entri ke tabel monitored_scheduled_task_log_items
di db setiap kali tugas jadwal dimulai, diakhiri, gagal, atau dilewati. Lihat isi tabel tersebut jika Anda ingin mengetahui kapan dan bagaimana tugas terjadwal dijalankan. Item log juga menyimpan metrik menarik lainnya seperti penggunaan memori, waktu eksekusi, dan banyak lagi.
Monitor jadwal akan mencoba menentukan nama untuk tugas yang dijadwalkan secara otomatis. Untuk perintah ini adalah nama perintahnya, untuk pekerjaan anonim nama kelas dari argumen pertama akan digunakan. Untuk beberapa tugas, seperti penutupan terjadwal, namanya tidak dapat ditentukan secara otomatis.
Untuk menetapkan nama tugas terjadwal secara manual, Anda dapat menggunakan monitorName()
.
Berikut ini contohnya.
// 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 ' );
}
Saat Anda mengubah nama tugas, monitor jadwal akan menghapus semua item log monitor dengan nama lama, dan membuat monitor baru menggunakan nama tugas baru.
Ketika paket mendeteksi bahwa pelaksanaan terakhir tugas terjadwal tidak berjalan tepat waktu, daftar schedule-monitor
akan menampilkan tugas tersebut menggunakan warna latar belakang merah. Dalam tangkapan layar ini, tugas bernama your-command
terlambat dijalankan.
Paket akan menentukan bahwa tugas berjalan terlambat jika tugas tersebut belum selesai pada waktu yang seharusnya dijalankan + waktu tenggang. Anda dapat menganggap waktu tenggang sebagai jumlah menit yang diperlukan untuk menyelesaikan suatu tugas dalam keadaan normal. Secara default, paket memberikan tenggang waktu 5 menit untuk setiap tugas.
Anda dapat menyesuaikan waktu tenggang dengan menggunakan metode graceTimeInMinutes
pada tugas. Dalam contoh ini waktu tenggang 10 menit digunakan untuk tugas your-command
.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Anda dapat menghindari pemantauan tugas terjadwal dengan menggunakan doNotMonitor
saat menjadwalkan tugas.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitor ();
}
Anda dapat menyimpan output dengan menggunakan storeOutputInDb
saat menjadwalkan tugas.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> storeOutputInDb ();
}
Outputnya akan disimpan dalam tabel monitored_scheduled_task_log_items
, di kunci output
kolom meta
.
Jika Anda menggunakan spatie/laravel-multitenancy Anda harus menambahkan PingOhDearJob
ke array not_tenant_aware_jobs
di config/multitenancy.php
.
' not_tenant_aware_jobs ' => [
// ...
Spatie ScheduleMonitor Jobs PingOhDearJob::class,
]
Tanpanya, PingOhDearJob
akan gagal karena tidak ada penyewa yang ditetapkan.
Paket ini dapat menyinkronkan jadwal Anda dengan pemeriksaan cron Oh Dear. Oh Dear akan mengirimi Anda pemberitahuan setiap kali tugas yang dijadwalkan tidak selesai tepat waktu.
Untuk memulai, Anda harus menginstal Oh Dear SDK terlebih dahulu.
composer require ohdearapp/ohdear-php-sdk
Selanjutnya Anda perlu memastikan kunci api_token
dan site_id
dari schedule-monitor
diisi dengan token API, dan id situs Oh Dear. Untuk memverifikasi bahwa nilai-nilai ini memiliki nilai yang benar, Anda dapat menjalankan perintah ini.
php artisan schedule-monitor:verify
Untuk menyinkronkan jadwal Anda dengan Oh Dear, jalankan perintah ini:
php artisan schedule-monitor:sync
Setelah itu, perintah list
akan menunjukkan bahwa semua tugas terjadwal di aplikasi Anda terdaftar di Oh Dear.
Untuk menjaga pekerjaan terjadwal sesingkat mungkin, Oh Dear akan di-ping melalui pekerjaan yang antri. Untuk memastikan pengiriman cepat ke Oh Dear, dan untuk menghindari pemberitahuan positif palsu, kami sangat menyarankan untuk membuat antrean khusus untuk pekerjaan ini. Anda dapat memasukkan nama antrian itu di kunci queue
file konfigurasi.
Oh Dear akan menunggu penyelesaian tugas jadwal selama beberapa menit tertentu. Inilah yang disebut masa tenggang. Secara default, semua tugas yang dijadwalkan akan memiliki tenggang waktu 5 menit. Untuk menyesuaikan nilai ini, Anda dapat menggunakan graceTimeInMinutes
untuk tugas terjadwal Anda.
Berikut contoh Oh Dear yang akan mengirimkan notifikasi jika tugas belum selesai pada pukul 00:10.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> graceTimeInMinutes ( 10 );
}
Jika Anda ingin tugas dipantau oleh monitor jadwal, namun tidak oleh Oh Dear, Anda dapat menggunakan doMonitorAtOhDear
ke tugas terjadwal Anda.
// in app/Console/Kernel.php
protected function schedule ( Schedule $ schedule )
{
$ schedule -> command ( ' your-command ' )-> daily ()-> doNotMonitorAtOhDear ();
}
Saat ini, paket ini tidak berfungsi untuk tugas yang menggunakan metode berikut:
between
unlessBetween
when
skip
Kami berasumsi bahwa, ketika tugas terjadwal Anda tidak berjalan dengan benar, tugas terjadwal yang mengirimkan pemberitahuan mungkin juga tidak akan berjalan. Itu sebabnya paket ini tidak mengirimkan notifikasi dengan sendirinya.
Layanan berikut dapat memberi tahu Anda ketika tugas terjadwal tidak berjalan dengan benar:
composer test
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan bug terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.