ป้ายกำกับ: Unix

Unix (ยูนิกซ์)
คือระบบปฏิบัติการคอมพิวเตอร์แบบหลายผู้ใช้ (multi-user) และทำงานหลายอย่างพร้อมกัน (multi-tasking) ที่มีชื่อเสียงด้านความเสถียร ความยืดหยุ่น และการเป็น Open System ที่สามารถทำงานบนฮาร์ดแวร์ได้หลากหลาย. พัฒนาขึ้นที่ Bell Labs โดยนักพัฒนารวมถึง Ken Thompson และ Dennis Ritchie ในช่วงทศวรรษ 1970 และมีอิทธิพลอย่างมากต่อระบบปฏิบัติการอื่นๆ เช่น Linux และ macOS

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 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 อื่น
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
/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

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