目次

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 ช่วยให้คุณทำงานประจำต่างๆ เป็นไปโดยอัตโนมัติได้อย่างมีประสิทธิภาพ และเพิ่มความน่าเชื่อถือในการทำงานของระบบ การใช้เครื่องมือทั้งสองอย่างถูกต้องจะช่วยลดต้นทุนการดำเนินงาน และทำให้งานบำรุงรักษาที่สำคัญเป็นไปโดยอัตโนมัติ ลองนำไปใช้ในระบบของคุณและสัมผัสถึงประสิทธิภาพของมันดูสิครับ