การสร้าง Task Scheduling ใน Laravel
ที่มา/ปัญหา
การพัฒนาระบบสารสนเทศในบางครั้งอาจจะต้องการให้โปรแกรมทำงานเฉพาะเวลาที่กำหนด การทำ task scheduling ก็เป็นอีกหนึ่งตัวเลือกที่จะช่วยให้เราสามารถกำหนดเวลาในการรันคำสั่งของโปรแกรมเราได้ โดยขั้นตอนการเขียนโปรแกรมมีดังต่อไปนี้
สิ่งที่จำเป็นและต้องเตรียม
๑. Laravel Framework
๒. Images Apache ใน Docker ที่ใช้อยู่ในปัจจุบัน
ขั้นตอนการเขียนโปรแกรม
๑. เข้าไปที่ terminal ใน docker container พิมพ์คำสั่ง cd /var/www/html เพื่อไปที่ path โปรแกรม แล้วลอง ls ดูว่าอยู่ที่โปรแกรมเราหรือยัง

๒. พิมพ์คำสั่ง php artisan make:command Sendinfo เพื่อสร้างไฟล์สำหรับเขียนคำสั่ง

๓. เปิดไฟล์ Sendinfo.php ที่ path app/Console/Commands/Sendinfo.php สังเกตตัวแปล $signature ‘app:sendinfo’ คือการกำหนดชื่อคำสั่ง ให้เขียนโปรแกรมคำสั่งที่จะใช้งาน เช่น insert ข้อมูล, update ข้อมูล, ส่งอีเมล ฯลฯ ที่ฟังก์ชัน handle

๔. เปิดไฟล์ Kernel.php ที่ path app/Console/Kernel.php สร้าง schedule โดยใช้ชื่อคำสั่งที่ตั้งไว้จากหัวข้อ ๔.๒.๓ สามารถศึกษา option command เพิ่มเติมได้ที่ https://laravel.com/docs/master/scheduling

๕. กลับไปที่ terminal ใน docker container พิมพ์คำสั่ง php artisan list จะเห็นว่ามีคำสั่ง app:sendinfo ที่เราเพิ่มขึ้นมา

๖. ทดสอบการใช้งาน schedule ในโหมด develop ด้วยการพิมพ์คำสั่ง php artisan schedule:work ใน terminal docker หากต้องการหยุดการทำงานให้ stop docker container

หากต้องการรันใช้งานบน production จะต้องเข้าไปสร้าง cron job โดยพิมพ์คำสั่ง crontab –e แล้วเพิ่มคำสั่ง * * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1 ไว้บรรทัดล่างสุด

ผลลัพธ์ที่ได้
โปรแกรมถูกรันคำสั่งตามเวลาที่ตั้งไว้ โดยในตัวอย่างได้ตั้งเวลาไว้ทุก 1 นาที ->everyMinute() สามารถดู option อื่นเพิ่มเติมได้ที่ https://laravel.com/docs/master/scheduling#schedule-frequency-options และเมื่อโปรแกรมทงานสำเร็จจะถูกเขียนข้อความไว้ที่ log ไฟล์

