แพ็คเกจนี้จะตรวจสอบกำหนดการ Laravel ของคุณ โดยจะเขียนรายการลงในตารางบันทึกใน db ในแต่ละครั้งที่งานกำหนดเวลาเริ่มต้น สิ้นสุด ล้มเหลว หรือถูกข้าม การใช้คำสั่ง 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
หมายเหตุ: การรันคำสั่ง sync จะลบจอภาพ 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
ใน db แต่ละครั้งที่งานกำหนดการเริ่มต้น สิ้นสุด ล้มเหลว หรือถูกข้าม ลองดูที่เนื้อหาของตารางนั้น หากคุณต้องการทราบว่างานตามกำหนดการดำเนินการเมื่อใดและอย่างไร รายการบันทึกยังมีตัวชี้วัดที่น่าสนใจอื่นๆ เช่น การใช้หน่วยความจำ เวลาดำเนินการ และอื่นๆ
การตรวจสอบกำหนดการจะพยายามกำหนดชื่อสำหรับงานที่กำหนดเวลาไว้โดยอัตโนมัติ สำหรับคำสั่ง นี่คือชื่อคำสั่ง สำหรับงานที่ไม่ระบุชื่อ ชื่อคลาสของอาร์กิวเมนต์แรกจะถูกใช้ สำหรับงานบางอย่าง เช่น การปิดตามกำหนดการ จะไม่สามารถกำหนดชื่อได้โดยอัตโนมัติ
หากต้องการตั้งชื่อของงานที่กำหนดเวลาไว้ด้วยตนเอง คุณสามารถแท็ก 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
กับงาน ในตัวอย่างนี้ ใช้เวลาผ่อนผัน 10 นาทีสำหรับงาน your-command
// 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 SDK ก่อน
composer require ohdearapp/ohdear-php-sdk
ถัดไป คุณต้องตรวจสอบให้แน่ใจว่าคีย์ api_token
และ site_id
ของ schedule-monitor
เต็มไปด้วยโทเค็น API และรหัสไซต์ Oh Dear เพื่อตรวจสอบว่าค่าเหล่านี้มีค่าที่ถูกต้องคุณสามารถรันคำสั่งนี้ได้
php artisan schedule-monitor:verify
หากต้องการซิงค์กำหนดการของคุณกับ Oh Dear ให้รันคำสั่งนี้:
php artisan schedule-monitor:sync
หลังจากนั้น คำสั่ง list
ควรแสดงว่างานที่กำหนดเวลาไว้ทั้งหมดในแอปของคุณได้รับการลงทะเบียนใน Oh Dear
เพื่อให้งานที่กำหนดเวลาไว้สั้นที่สุดเท่าที่จะเป็นไปได้ Oh Dear จะถูกส่ง Ping ผ่านงานที่อยู่ในคิว เพื่อให้แน่ใจว่าการจัดส่งไปยัง Oh Dear รวดเร็ว และเพื่อหลีกเลี่ยงการแจ้งเตือนเชิงบวกที่ผิดพลาด เราขอแนะนำอย่างยิ่งให้สร้างคิวเฉพาะสำหรับงานเหล่านี้ คุณสามารถใส่ชื่อของคิวนั้นลงใน queue
ของไฟล์ปรับแต่งได้
โอ้ที่รักจะรอให้งานตามกำหนดเวลาเสร็จสิ้นตามจำนวนนาทีที่กำหนด นี่เรียกว่าเวลาผ่อนผัน ตามค่าเริ่มต้น งานที่กำหนดเวลาไว้ทั้งหมดจะมีเวลาผ่อนผัน 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) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม