CronJob คืออะไร? ระบบตั้งเวลาสั่งงานอัตโนมัติบน Linux
CronJob คือระบบตั้งเวลาบน Linux ที่ช่วยให้ผู้ดูแลเซิร์ฟเวอร์สามารถกำหนดให้คำสั่งหรือสคริปต์ทำงานอัตโนมัติตามเวลาที่ตั้งไว้ ไม่ว่าจะเป็นการสำรองฐานข้อมูล ลบไฟล์ชั่วคราว หรือตรวจสอบสถานะระบบ CronJob จัดการได้ทั้งหมดโดยไม่ต้องนั่งพิมพ์คำสั่งเอง ถือเป็นเครื่องมือพื้นฐานที่ขาดไม่ได้สำหรับการดูแลเซิร์ฟเวอร์
Cron ทำงานอย่างไร
Cron เป็น daemon (โปรแกรมที่ทำงานอยู่เบื้องหลัง) บน Linux ที่คอยตรวจสอบตารางเวลาและรันคำสั่งตามที่ตั้งไว้ ส่วน crontab คือไฟล์ที่เก็บตารางเวลา ทุก user ในระบบสามารถมี crontab เป็นของตัวเองได้
ทำความเข้าใจ Crontab Syntax
หัวใจของ CronJob คือการเขียน crontab syntax ที่ถูกต้อง ประกอบด้วย 5 ส่วนตามด้วยคำสั่งที่ต้องการรัน
นาที ชั่วโมง วันของเดือน เดือน วันของสัปดาห์ คำสั่ง
(0-59) (0-23) (1-31) (1-12) (0-7) command
เครื่องหมาย * หมายถึงทุกค่า เครื่องหมาย , ใช้ระบุหลายค่า และ / ใช้กำหนดช่วง
วิธีแก้ไข Crontab
crontab -e # แก้ไข crontab ของ user ปัจจุบัน
crontab -l # ดู crontab ที่ตั้งไว้
crontab -r # ลบ crontab ทั้งหมด (ระวัง!)
ตัวอย่าง CronJob ที่ใช้บ่อย
สำรองฐานข้อมูลทุกคืน
0 3 * * * mysqldump -u root mydb > /backup/db_$(date +\%Y\%m\%d).sql
รันทุกวันตอนตี 3 สำรองฐานข้อมูลพร้อมใส่วันที่ในชื่อไฟล์
ลบ log เก่าทุกสัปดาห์
0 4 * * 0 find /var/log/myapp -name "*.log" -mtime +30 -delete
ทุกวันอาทิตย์ตอนตี 4 ลบ log ที่เก่ากว่า 30 วัน
ตรวจสอบ disk space ทุก 30 นาที
*/30 * * * * df -h | grep -E "9[0-9]%|100%" && echo "Disk almost full" | mail -s "Alert" [email protected]
Cron vs Systemd Timers
Linux รุ่นใหม่มีทางเลือกเพิ่มเติมคือ systemd timers ซึ่งให้ log ที่ละเอียดกว่า สามารถรันชดเชยได้ถ้าพลาดเวลา และจัดการ dependency ระหว่าง service ได้ดีกว่า แต่ตั้งค่ายุ่งยากกว่า cron
สำหรับงานส่วนใหญ่ cron ยังคงเป็นตัวเลือกที่ดีเพราะง่ายและตรงไปตรงมา
เคล็ดลับและข้อควรระวัง
ระบุ path เต็มเสมอ
Cron ไม่ได้โหลด environment เหมือนตอนล็อกอิน ควรระบุ path เต็มของคำสั่ง เช่น /usr/bin/python3 แทน python3
เก็บ output ไว้ตรวจสอบ
เพิ่ม redirect output เช่น >> /var/log/myjob.log 2>&1 ต่อท้ายคำสั่ง เพื่อตรวจสอบปัญหาได้ภายหลัง
ทดสอบคำสั่งก่อนใส่ crontab
รันคำสั่งด้วยมือก่อนเสมอเพื่อให้แน่ใจว่าทำงานถูกต้อง
ระวังเรื่อง timezone
Cron ใช้ timezone ของระบบ ถ้าเซิร์ฟเวอร์ตั้ง UTC แต่ต้องการรัน job ตามเวลาไทย ต้องคำนวณเวลาให้ถูก
คำถามที่พบบ่อย
CronJob รันแล้วไม่ทำงาน ต้องเช็คอะไร?
สาเหตุที่พบบ่อยคือ path ไม่ถูกต้อง สิทธิ์ของไฟล์ไม่เพียงพอ หรือ environment variable ไม่ถูกตั้งค่า ลองเพิ่ม redirect output เพื่อดู error log และตรวจสอบ /var/log/syslog หรือ /var/log/cron ด้วย
ตั้ง CronJob ให้รันทุกกี่วินาทีได้ไหม?
Cron รองรับความถี่ต่ำสุดที่ 1 นาที หากต้องการรันทุกกี่วินาที ต้องใช้วิธีอื่น เช่น เขียน script ที่วนลูปด้วย sleep หรือใช้ systemd timer ที่รองรับหน่วยวินาที
CronJob ทำงานซ้อนกันได้ไหม?
ได้ ถ้า job ก่อนหน้ายังไม่เสร็จแต่ถึงเวลารันใหม่ cron จะสร้าง process ใหม่ทับ หากต้องการป้องกัน ให้ใช้ flock หรือเขียน lock file เพื่อไม่ให้ job ซ้อนกัน
CronJob ของ root กับ user ปกติต่างกันอย่างไร?
CronJob ของ root มีสิทธิ์เข้าถึงทุกอย่างในระบบ ส่วน user ปกติจะมีสิทธิ์จำกัดตาม permission ของ user นั้น แนะนำให้ใช้ root cron เฉพาะงานที่จำเป็นจริง ๆ เท่านั้น
ตั้งงานอัตโนมัติบน VPS ของ DriteStudio
CronJob เป็นเครื่องมือที่ขาดไม่ได้สำหรับการจัดการเซิร์ฟเวอร์ หากคุณต้องการ VPS ที่มี root access เต็มรูปแบบ สามารถตั้ง CronJob ได้ตามใจโดยไม่มีข้อจำกัด DriteStudio เตรียมเซิร์ฟเวอร์บน hardware คุณภาพสูงให้ scheduled job ของคุณรันตรงเวลาทุกครั้ง หรือหากต้องการ Hosting ก็สามารถใช้ CronJob ได้เช่นกัน ติดต่อ DriteStudio วันนี้เพื่อเลือกแพลนที่เหมาะกับคุณ