หากคุณเคยทำงานกับระบบ 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 Job ทั้งหมดของผู้ใช้แต่ละคน Cron daemon จะมาอ่านไฟล์นี้ทุก 1 นาที เพื่อตรวจว่ามี Job ไหนต้องรันบ้าง
โครงสร้างของ Crontab
แต่ละบรรทัดใน crontab คือ 1 Cron Job มีรูปแบบดังนี้
BASH / Shell
BASH / Shell
* * * * * คำสั่งที่จะรัน
│ │ │ │ │
│ │ │ │ └── วันในสัปดาห์ (0-7, 0 และ 7 = อาทิตย์) │ │ │ └──── เดือน (1-12) │ │ └────── วันในเดือน (1-31) │ └──────── ชั่วโมง (0-23) └────────── นาที (0-59)