หากคุณเคยทำงานกับระบบ Linux / Unix มาสักระยะ คงเคยได้ยินคำสามคำนี้บ่อยครั้ง แต่หลายคนมักใช้แทนกันโดยไม่ทันสังเกต ซึ่งจริง ๆ แล้วทั้งสามคำมีความหมายที่ต่างกันอย่างชัดเจน
Cron คืออะไร ?
Cron คือ daemon ( โปรแกรมที่ทำงานอยู่เบื้องหลังระบบปฏิบัติการ ) ที่มีหน้าที่คอยตรวจสอบและรันคำสั่งตามเวลาที่กำหนดไว้ พูดง่าย ๆ คือ Cron คือ ตัวระบบหรือเครื่องยนต์ ที่คอยทำงานตลอดเวลา และมีหน้าที่เดียวคือ “อ่านตาราง แล้วรันคำสั่งตามเวลา”
- ชื่อมาจากภาษากรีก Chronos ( χρόνος ) แปลว่า “เวลา”
- ทำงานเป็น background process ชื่อว่า
crond - มีอยู่ในระบบ Unix/Linux เกือบทุกเวอร์ชัน
- ตรวจสอบ schedule ทุก ๆ 1 นาที
ดูว่า cron daemon กำลังทำงานอยู่หรือไม่
# Ubuntu/Debiansystemctl status cron
# CentOS/RHELsystemctl 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/ ← สคริปต์ที่รันทุกเดือน
ข้อควรระวัง
- PATH อาจไม่เหมือนกับ shell ปกติ — ควรระบุ path เต็มในคำสั่งเสมอ เช่น
/usr/bin/python3แทนpython3 crontab -rลบทุกอย่าง — ควรใช้crontab -eแล้วลบเฉพาะบรรทัดที่ต้องการแทน- Log การทำงาน — ดูได้ที่
/var/log/syslogหรือ/var/log/cron - Output จะถูกส่งทางอีเมล — ถ้าไม่ต้องการ ให้ redirect:
command > /dev/null 2>&1
อ่านเพิ่มเติม
