1. Cron คืออะไร
Cron คือโปรแกรมจัดตารางงานตามเวลา (time-based job scheduler) ในระบบปฏิบัติการ Linux และ Unix โดยส่วนใหญ่แล้วถูกใช้เพื่อทำให้งานที่ต้องดำเนินการเป็นประจำโดยผู้ดูแลระบบหรือนักพัฒนาเป็นไปโดยอัตโนมัติ ใน Ubuntu ก็มีการติดตั้ง Cron มาเป็นมาตรฐานเช่นกัน และถูกใช้ในหลากหลายสถานการณ์ เช่น การจัดการเซิร์ฟเวอร์ การสำรองข้อมูล และการรันสคริปต์เป็นประจำ
หลักการทำงานของ Cron
Cron ทำงานโดยการกำหนดคำสั่งที่จะให้รันตามเวลาหรือช่วงเวลาที่ระบุไว้ในไฟล์ที่เรียกว่า “crontab” ไฟล์ Crontab มี 5 ฟิลด์ดังต่อไปนี้ และเราสามารถกำหนดเวลาในการรันงานได้อย่างละเอียดโดยกำหนดค่าในแต่ละฟิลด์
- นาที (0–59)
- ชั่วโมง (0–23)
- วัน (1–31)
- เดือน (1–12)
- วันในสัปดาห์ (0–7 โดยที่ 0 หรือ 7 คือวันอาทิตย์)
ตัวอย่างเช่น งาน “สำรองข้อมูลทุกวันเวลา 5 โมงเช้า” จะถูกเขียนลงใน crontab ดังนี้
0 5 * * * tar -zcf /var/backups/home.tgz /home/
ลักษณะเด่นที่สำคัญของ Cron คือการที่สามารถทำให้งานประจำต่างๆ เป็นไปโดยอัตโนมัติได้ด้วยวิธีนี้
ใครควรใช้ Cron?
Cron เป็นเครื่องมือที่จำเป็นสำหรับผู้ดูแลระบบ รวมถึงนักพัฒนาที่ต้องการเพิ่มประสิทธิภาพงานประจำวัน และผู้ที่ต้องการรันสคริปต์บนเซิร์ฟเวอร์เป็นประจำ

2. การตั้งค่า Cron Job
วิธีการแก้ไข Crontab
ในการตั้งค่า Cron Job อันดับแรกคุณต้องเข้าถึงและแก้ไขไฟล์ “crontab” ใน Ubuntu ใช้คำสั่ง crontab -e
เพื่อเปิดไฟล์ crontab เฉพาะสำหรับผู้ใช้
crontab -e
ไวยากรณ์พื้นฐานของ Cron Job
Cron Job ที่เขียนใน Crontab จะประกอบด้วยฟิลด์ที่ระบุเวลา และคำสั่งที่จะให้รัน รูปแบบของ Cron Job ทั่วไปมีดังนี้
นาที ชั่วโมง วัน เดือน วันในสัปดาห์ คำสั่ง
ตัวอย่างเช่น Cron Job ด้านล่างนี้ กำหนดงานให้สำรองข้อมูลไดเรกทอรี /home/
ทุกวันเวลา 5 โมงเช้า
0 5 * * * tar -zcf /var/backups/home.tgz /home/
การบันทึกและยืนยัน Crontab
หลังจากเพิ่ม Job ลงในไฟล์ crontab แล้ว การบันทึกและปิด Editor จะทำให้การเปลี่ยนแปลงมีผล หากต้องการยืนยันว่าการตั้งค่าถูกต้องหรือไม่ สามารถใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ Cron Job ที่มีอยู่ทั้งหมด
crontab -l
3. การจัดตาราง Cron Job ขั้นสูง
การรัน Job ตามช่วงเวลาที่กำหนดเอง
ตัวอย่างเช่น หากต้องการตั้งค่าให้รันทุกนาทีหรือทุก 5 นาที ให้เขียนดังนี้
- รันทุกนาที:
* * * * * /path/to/script.sh
- รันทุก 5 นาที:
*/5 * * * * /path/to/script.sh
การรันตามวันในสัปดาห์หรือช่วงเวลาที่เฉพาะเจาะจง
หากต้องการรันงานเฉพาะช่วงสุดสัปดาห์ หรือวันในสัปดาห์ที่เฉพาะเจาะจง ให้ระบุค่าในฟิลด์วันในสัปดาห์ ตัวอย่างเช่น หากต้องการรันสคริปต์ทุกวันจันทร์เวลา 02:15 น. ให้เขียนดังนี้
15 2 * * 1 /path/to/script.sh
4. การจัดการข้อผิดพลาดและการแก้ไขปัญหา
ปัญหาที่พบบ่อยของ Cron Job และวิธีการแก้ไข
Job ไม่ทำงาน
หาก Cron Job ไม่ทำงาน อันดับแรกให้ตรวจสอบจุดพื้นฐานต่อไปนี้
- การตรวจสอบสิทธิ์ (Permission): ตรวจสอบว่าสคริปต์หรือคำสั่งที่จะรันมีสิทธิ์ในการดำเนินการหรือไม่
- การระบุ Full Path: Cron Job แตกต่างจาก Shell ทั่วไปที่ตัวแปรสภาพแวดล้อม
$PATH
มีข้อจำกัด ดังนั้นจำเป็นต้องระบุ Full Path ของคำสั่งและไฟล์
/usr/bin/python3 /path/to/script.py
การตรวจสอบ Log
ผลการทำงานหรือข้อผิดพลาดของ Cron Job จะถูกบันทึกไว้ใน /var/log/syslog
หากต้องการตรวจสอบเหตุผลที่ Job ไม่ทำงานหรือรายละเอียดข้อผิดพลาด ให้ตรวจสอบไฟล์ Log นี้
grep CRON /var/log/syslog

5. ข้อควรพิจารณาด้านความปลอดภัย
การควบคุมการเข้าถึงของผู้ใช้
หากต้องการจำกัดผู้ใช้ที่สามารถรัน Cron Job ได้ ให้ใช้ไฟล์ /etc/cron.allow
และ /etc/cron.deny
หากระบุชื่อผู้ใช้ในไฟล์ /etc/cron.allow
เฉพาะผู้ใช้เหล่านั้นเท่านั้นที่จะสามารถตั้งค่า Cron Job ได้
echo "user_name" >> /etc/cron.allow
ความปลอดภัยในการเข้าสู่ระบบและ Cron Job
ในการรัน Cron Job อาจจำเป็นต้องมีการใช้ SSH Key แบบอัตโนมัติหรือการจัดการรหัสผ่าน เพื่อหลีกเลี่ยงข้อผิดพลาดในการยืนยันตัวตน
6. การใช้ Anacron: สำหรับงานที่มีความถี่ต่ำ
Anacron คืออะไร?
Anacron คือโปรแกรมจัดตารางงานที่ใช้ในสภาพแวดล้อมที่ระบบไม่ได้ทำงานตลอดเวลา Anacron จะรัน Job ที่ยังไม่ได้ทำงานในขณะที่ระบบออฟไลน์ เมื่อระบบเริ่มทำงานอีกครั้ง ทำให้เหมาะสำหรับงานประจำบนเครื่อง Desktop PC หรือ Laptop
7. ตัวอย่างการใช้งาน Cron Job ที่เป็นประโยชน์
การสำรองข้อมูลอัตโนมัติ
ตัวอย่างการตั้งค่า Cron Job สำหรับการสำรองข้อมูลเป็นประจำ
0 2 * * * tar -zcf /var/backups/home_backup_$(date +%Y-%m-%d).tgz /home/
8. สรุป
การใช้ Cron และ Anacron ช่วยให้คุณทำงานประจำต่างๆ เป็นไปโดยอัตโนมัติได้อย่างมีประสิทธิภาพ และเพิ่มความน่าเชื่อถือในการทำงานของระบบ การใช้เครื่องมือทั้งสองอย่างถูกต้องจะช่วยลดต้นทุนการดำเนินงาน และทำให้งานบำรุงรักษาที่สำคัญเป็นไปโดยอัตโนมัติ ลองนำไปใช้ในระบบของคุณและสัมผัสถึงประสิทธิภาพของมันดูสิครับ