# cron และ crontab

> วิธีที่ cron ใช้รันงานตามกำหนดการ, ฟิลด์เวลาทั้งห้าของ crontab, ตำแหน่งที่เก็บไฟล์ cron ของระบบ และการเปรียบเทียบกับ systemd timers

cron คือ daemon แบบคลาสสิกของ Unix ที่ทำหน้าที่รันคำสั่งตามกำหนดการ ผู้ใช้แต่ละคนจะมี crontab ซึ่งแก้ไขได้ด้วยคำสั่ง crontab -e โดยแต่ละบรรทัดจะมีฟิลด์เวลาห้าฟิลด์ (นาที, ชั่วโมง, วันของเดือน, เดือน, วันของสัปดาห์) ตามด้วยคำสั่ง งานของระบบจะอยู่ใน /etc/crontab และ /etc/cron.d/

## ฟิลด์เวลา

'30 2 * * *' หมายถึง 02:30 น. ทุกวัน; '*/10 * * * *' ทุกสิบนาที; '0 9 * * 1' 09:00 น. ทุกวันจันทร์ วันของสัปดาห์ที่ 0 และ 7 คือวันอาทิตย์

## ไฟล์ระบบ

ไฟล์ใน /etc/cron.d/ และ /etc/crontab จะมีฟิลด์เพิ่มเติมคือชื่อผู้ใช้ ระหว่างฟิลด์เวลากับคำสั่ง ไดเรกทอรีเช่น /etc/cron.daily จะเก็บสคริปต์ที่รันวันละครั้ง

## ข้อควรระวังทั่วไป

cron รันด้วยสภาพแวดล้อมที่จำกัด: ควรใช้พาธแบบเต็มหรือตั้งค่า PATH ใน crontab ผลลัพธ์จะถูกส่งทางอีเมลถึงเจ้าของหรือสูญหายไป ควรเปลี่ยนเส้นทาง (redirect) ไปยังไฟล์บันทึก (log file) อักขระ % มีความหมายพิเศษในบรรทัด crontab และต้องใช้ \% เพื่อหลีกอักขระ

## systemd timers

บนดิสทริบิวชันที่ใช้ systemd หน่วย .timer เป็นทางเลือกหนึ่งที่มีการบันทึกใน journal, มีการหน่วงเวลาแบบสุ่ม และสามารถรันงานที่พลาดไปได้ (Persistent=true)

## วิธีเพิ่มงานรายวัน

1. เปิด crontab ของคุณ: crontab -e
2. เพิ่มบรรทัด เช่น: 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
3. บันทึกและออกจากโปรแกรม; cron จะรับการเปลี่ยนแปลงโดยอัตโนมัติ
4. แสดงรายการงาน: crontab -l

## ข้อควรระวัง

- 'crontab -r' จะลบ crontab ทั้งหมดโดยไม่มีการยืนยัน
- ทดสอบคำสั่งด้วยตนเองโดยใช้ผู้ใช้เดียวกันก่อนที่จะกำหนดเวลา

## แหล่งอ้างอิง

- [crontab(5)](https://man7.org/linux/man-pages/man5/crontab.5.html)
- [crontab(5) (Debian)](https://manpages.debian.org/bookworm/cron/crontab.5.en.html)
- [systemd.timer(5)](https://man7.org/linux/man-pages/man5/systemd.timer.5.html)

อัปเดตล่าสุด: 2026-10-08
URL: https://raincleaner.eu/th/wiki/linux/cron
