ป้ายกำกับ: รันคำสั่ง

Cron, Cron Job และ Crontab ต่างกันอย่างไร ?Cron, Cron Job และ Crontab ต่างกันอย่างไร ?

หากคุณเคยทำงานกับระบบ Linux / Unix มาสักระยะ คงเคยได้ยินคำสามคำนี้บ่อยครั้ง แต่หลายคนมักใช้แทนกันโดยไม่ทันสังเกต ซึ่งจริง ๆ แล้วทั้งสามคำมีความหมายที่ต่างกันอย่างชัดเจน


Cron คืออะไร ?

Cron คือ daemon ( โปรแกรมที่ทำงานอยู่เบื้องหลังระบบปฏิบัติการ ) ที่มีหน้าที่คอยตรวจสอบและรันคำสั่งตามเวลาที่กำหนดไว้ พูดง่าย ๆ คือ Cron คือ ตัวระบบหรือเครื่องยนต์ ที่คอยทำงานตลอดเวลา และมีหน้าที่เดียวคือ “อ่านตาราง แล้วรันคำสั่งตามเวลา”

  • ชื่อมาจากภาษากรีก Chronos ( χρόνος ) แปลว่า “เวลา”
  • ทำงานเป็น background process ชื่อว่า crond
  • มีอยู่ในระบบ Unix/Linux เกือบทุกเวอร์ชัน
  • ตรวจสอบ schedule ทุก ๆ 1 นาที

ดูว่า cron daemon กำลังทำงานอยู่หรือไม่
# Ubuntu/Debian
systemctl status cron
# CentOS/RHEL
systemctl status crond
เปรียบได้กับ: “เครื่องจักรในโรงงาน” — ทำงานตลอด 24 ชั่วโมง คอยดูนาฬิกา และรันงานตามที่โปรแกรมไว้


Cron Job คืออะไร ?

Cron Job คือ งานแต่ละชิ้น ที่ถูกตั้งเวลาให้ Cron รันโดยอัตโนมัติ แต่ละ Job ประกอบด้วย 2 ส่วนคือ เวลาที่จะรัน + คำสั่งที่จะรัน
ตัวอย่าง Cron Job ในชีวิตจริง

  • รันสคริปต์ backup ฐานข้อมูลทุกคืนเวลาเที่ยงคืน
  • ส่งอีเมลสรุปรายงานทุกเช้าวันจันทร์
  • ลบไฟล์ log เก่าทุกวันอาทิตย์
  • ดึงข้อมูล API ทุก 15 นาที

ตัวอย่าง Cron Job หนึ่งรายการ
0 2 * * * /home/user/backup.sh
แปลว่า: “รัน backup.sh ทุกวัน เวลา 02:00 น.”
เปรียบได้กับ: “ออเดอร์งานแต่ละใบ” — บอกว่าต้องทำอะไร และทำเมื่อไหร่


Crontab คืออะไร ?

Crontab ( ย่อมาจาก Cron Table ) คือ ไฟล์ที่เก็บรายการ Cron Job ทั้งหมดของผู้ใช้แต่ละคน Cron daemon จะมาอ่านไฟล์นี้ทุก 1 นาที เพื่อตรวจว่ามี Job ไหนต้องรันบ้าง

โครงสร้างของ Crontab

แต่ละบรรทัดใน crontab คือ 1 Cron Job มีรูปแบบดังนี้

* * * * * คำสั่งที่จะรัน
│ │ │ │ │
│ │ │ │ └── วันในสัปดาห์ (0-7, 0 และ 7 = อาทิตย์)
│ │ │ └──── เดือน (1-12)
│ │ └────── วันในเดือน (1-31)
│ └──────── ชั่วโมง (0-23)
└────────── นาที (0-59)

คำสั่งจัดการ Crontab

แก้ไข crontab ของตัวเอง
crontab -e
แสดงรายการ cron job ทั้งหมด
crontab -l
ลบ crontab ทั้งหมด ( ระวัง! )
crontab -r
ดู crontab ของ user อื่น ( ต้องเป็น root )
crontab -u username -l


ตัวอย่าง Crontab จริง

ทำ backup ทุกวันเวลา 02:00 น.
0 2 * * * /home/user/scripts/backup.sh
ส่งรายงานทุกวันจันทร์เวลา 08:00 น.
0 8 * * 1 /home/user/scripts/weekly_report.sh
ลบ temp files ทุก 15 นาที
*/15 * * * * rm -rf /tmp/myapp/cache/*
รันทุกวันที่ 1 ของเดือน เวลาเที่ยงคืน
0 0 1 * * /home/user/scripts/monthly_cleanup.sh
เปรียบได้กับ: “รายการออเดอร์ทั้งหมด” — เก็บ Cron Job ไว้ครบ แล้วให้ Cron มาอ่านเอง


สรุปความต่างในประโยคเดียว

คำคืออะไรเปรียบได้กับ
Cronตัว daemon / ระบบที่รันงานตามเวลาโรงงาน / เครื่องจักร
Cron Jobงานแต่ละชิ้นที่กำหนดให้รันออเดอร์สินค้าแต่ละใบ
Crontabไฟล์ / ตารางที่เก็บรายการ Cron Jobรายการออเดอร์ทั้งหมด

กล่าวโดยสรุป: Cron อ่าน Crontab แล้ว รัน Cron Job


ตำแหน่งไฟล์ที่เกี่ยวข้อง

/var/spool/cron/crontabs/ ← crontab ของแต่ละ user ( Linux )
/etc/crontab ← system-wide crontab
/etc/cron.d/ ← crontab เพิ่มเติมของระบบ
/etc/cron.daily/ ← สคริปต์ที่รันทุกวัน
/etc/cron.weekly/ ← สคริปต์ที่รันทุกสัปดาห์
/etc/cron.monthly/ ← สคริปต์ที่รันทุกเดือน


ข้อควรระวัง

  1. PATH อาจไม่เหมือนกับ shell ปกติ — ควรระบุ path เต็มในคำสั่งเสมอ เช่น /usr/bin/python3 แทน python3
  2. crontab -r ลบทุกอย่าง — ควรใช้ crontab -e แล้วลบเฉพาะบรรทัดที่ต้องการแทน
  3. Log การทำงาน — ดูได้ที่ /var/log/syslog หรือ /var/log/cron
  4. Output จะถูกส่งทางอีเมล — ถ้าไม่ต้องการ ให้ redirect: command > /dev/null 2>&1

อ่านเพิ่มเติม