Dev to webs {Coding…}

บทเรียนฟรีด้านการพัฒนาซอฟต์แวร์ ที่ครอบคลุมเนื้อหาหลากหลาย ตั้งแต่การเขียนโค้ดพื้นฐานไปจนถึงเทคนิคขั้นสูง

บทที่ 2: การตั้ง Cron Jobs ด้วย Scheduler

🔹 เกริ่นนำ

Laravel มีระบบ Task Scheduler ที่ช่วยให้เราสามารถตั้งเวลาให้ Artisan command ทำงานอัตโนมัติโดยไม่ต้องสร้าง Cron หลายรายการ เพียงแค่ตั้งค่า Cron รายการเดียวให้รัน Laravel scheduler ทุกนาที แล้วกำหนดงานต่าง ๆ ผ่าน app/Console/Kernel.php

บทนี้จะสอนการตั้ง Scheduled Task เช่น ส่งอีเมลรายวัน ลบ log เก่า หรือดึงข้อมูลจาก API ตามเวลาที่กำหนด

🔸 ตั้ง Cron Job ที่ระบบ (Linux/Unix)

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

💡 ตั้งให้รันทุกนาที แล้ว Laravel จะควบคุมตารางเอง

🔸 การกำหนด Task ใน Kernel

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('report:daily')->dailyAt('08:00');
    $schedule->command('backup:run')->weekly()->sundays()->at('02:00');
}

🔸 ประเภทเวลาที่ Laravel รองรับ

  • daily()
  • hourly()
  • weekly()
  • monthly()
  • everyMinute(), everyFiveMinutes()
  • cron('0 9 * * *') (ใช้ Cron expression)

🔸 การเพิ่มเงื่อนไข เช่น ให้ทำงานเฉพาะ production

$schedule->command('report:daily')
    ->daily()
    ->environments(['production']);

🔸 การตรวจสอบงานย้อนหลัง

Laravel จะบันทึก log ไว้ใน storage/logs/laravel.log เมื่อ run แต่ละครั้ง