Task Scheduling Laravel แบบเร็วๆ
Cron Jobs หรือ Crontab คือคำสั่งที่ระบุไว้เพื่อให้ทำตามเวลาที่กำหนด เหมาะสำหรับงานบางอย่างที่ต้องทำซ้ำๆหลายๆครั้ง อาจจะเป็นทุกๆชั่วโมง ทุกๆวันหรือทุกๆเดือนก็ได้ เช่น การสั่งให้Server ทำการ Backup ทุกๆสัปดาห์
- crontab filename การนำเอาคำสั่ง crontab จากไฟล์อื่น
- crontap -e แก้ไข crontab ปัจจุบัน
- crontab -l ดูคำสั่ง crontab ทั้งหมดที่มีอยู่
- crontab -r ลบคำสั่ง crontab ที่มีทั้งหมด
- crontab -u user คำสั่งจากผู้ดูแลระบบเท่านั้น เพื่อใช้ดู แก้ไข และลบ crontab ของ user แต่ละคน
รูปแบบของคำสั่ง crontab มีทั้งหมด 6 fields ดังนี้
1 = minute มีค่า 0–59 เวลาเป็นนาที จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงนาทีที่กำหนด
2 = hour มีค่า 0–23 เวลาเป็นชั่วโมง จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงชั่วโมงที่กำหนด
3 = day มีค่า 1–31 เวลาเป็นวัน จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงวันที่กำหนด
4 = month มีค่า 1–12 เวลาเป็นเดือน จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงเดือนที่กำหนด
5 = weekday มีค่า 0–6 วันของแต่ละสัปดาห์
6 = command เราสามารถกำหนดคำสั่งได้มากมาย รวมทั้ง script ต่าง ๆ ตามที่เราต้องการ
จากการที่ส่วนตัวเขียนเว็บโดยใช้ Laravel เลยพบว่า Laravel 5.6 มี Task Scheduling สำหรับตั้งเวลาเพื่อให้ทำงานตามที่ต้องการ
เริ่มต้นด้วยการที่เรา สร้าง โปรเจ็ค Laravel ขึ้นมาโดยใช้คำสั่ง
composer create-project --prefer-dist laravel/laravel testCronjob "5.6.*"
ต่อด้วย คำสั่ง
composer install
จากนั้น รันโปรเจ็คโดยใช้คำสั่ง
php artisan serve
จากนั้น สร้าง console สำหรับ รันคำสั่ง cronjob
php artisan make:command CronJob
หลังจากรัน คำสั่ง จะได้ ไฟล์ชื่อ Cronjob.php ใน app/Console/Commands/
ถัดไป , เปิด App\Console\Kernel.php และเปลี่ยนตามนี้
สามารถกำหนดเวลาที่ต้องการได้ โดยสามารถดูได้จากใน
เพียงเท่านี้ Task schedule ของเราก็ได้ทำการ Setup ไว้เรียบร้อย
เราสามารถทดลองได้ทันทีโดยใช้คำสั่ง
php artisan list
และตามด้วยคำสั่งที่ได้ตั้งไว้ใน Command/Cronjob
ต่อจากนั้นก็สามารถใช้คำสั่งที่เราตั้งไว้ได้เลยดังนี้
php artisan Cronjob
เพียงแค่นี้ ก็เรียบร้อย