Cron Job คืออะไร? ตั้งค่า Cron บน Hosting ไทย 2026
Cron Job คือคำสั่งที่ถูกตั้งให้รันโดยอัตโนมัติตามเวลาที่กำหนด เหมาะสำหรับงานที่ต้องทำซ้ำๆ เช่น ส่งอีเมล newsletter, สำรองข้อมูล, อัพเดท sitemap หรือล้าง cache ในช่วงเวลาที่กำหนด
A Cron Job is a command scheduled to run automatically at specified times — perfect for repetitive tasks like sending newsletter emails, database backups, sitemap updates, or cache clearing.
ไวยากรณ์ Cron Expression
Cron expression ประกอบด้วย 5 ฟิลด์ตามลำดับ:
* * * * * command
| | | | |
| | | | └── Day of week (0=Sun, 1=Mon...6=Sat)
| | | └──── Month (1-12)
| | └────── Day of month (1-31)
| └──────── Hour (0-23)
└────────── Minute (0-59)
ตัวอย่าง Cron Expression ยอดนิยม
0 * * * *— รันทุกชั่วโมง ที่นาทีที่ 00 2 * * *— รันทุกวัน เวลา 02:00 น.0 2 * * 0— รันทุกวันอาทิตย์ เวลา 02:00 น.0 2 1 * *— รันวันที่ 1 ของทุกเดือน เวลา 02:00 น.*/5 * * * *— รันทุก 5 นาที0 9,17 * * 1-5— รันเวลา 09:00 และ 17:00 วันจันทร์ถึงศุกร์
Common expressions: every hour at minute 0, daily at 2AM, every Sunday 2AM, 1st of every month, every 5 minutes, 9AM and 5PM weekdays.
สร้าง Cron Job ใน DirectAdmin
- Login DirectAdmin → Advanced Features → Cron Jobs
- กรอก Minute, Hour, Day, Month, Weekday และ Command
- ตัวอย่าง command backup database ทุกคืน:
/usr/bin/mysqldump -u dbuser -p'dbpass' dbname > /home/user/backup/db_$(date +\%Y\%m\%d).sql - คลิก Add Cron Job
In DirectAdmin: Advanced Features → Cron Jobs → Fill minute/hour/day/month/weekday and command → Add Cron Job.
WordPress WP-Cron
WordPress มีระบบ Cron ของตัวเองที่เรียกว่า WP-Cron ทำงานโดยรัน wp-cron.php ทุกครั้งที่มีผู้เยี่ยมชมเว็บ ข้อเสียคือถ้าไม่มีผู้เยี่ยมชม tasks จะไม่รัน
วิธีแก้: ปิด WP-Cron และสร้าง real cron job แทน:
# ใน wp-config.php เพิ่มบรรทัด:
define('DISABLE_WP_CRON', true);
# สร้าง cron job ใน DirectAdmin:
*/5 * * * * /usr/bin/php /home/user/public_html/wp-cron.php > /dev/null 2>&1
Use Cases ยอดนิยมสำหรับ Cron Job
- Database backup: mysqldump ทุกคืนเวลา 02:00 น.
- Send newsletters: ส่ง email queue ทุก 15 นาที
- Sitemap update: อัพเดท sitemap.xml ทุก 6 ชั่วโมง
- Cache clearing: ล้าง expired cache ทุกชั่วโมง
- Log rotation: ย้าย/ลบ log ไฟล์เก่าทุกอาทิตย์
- SSL renewal check: ตรวจสอบวันหมดอายุ SSL ทุกวัน
- Cleanup temp files: ลบไฟล์ชั่วคราวทุกวัน
Troubleshoot Cron ที่ไม่ทำงาน
- Path ผิด: ใน cron ต้องใช้ absolute path เช่น /usr/bin/php แทน php
- Permission ผิด: ไฟล์ script ต้องมี permission execute (chmod +x)
- Output redirect: เพิ่ม
>> /tmp/cron.log 2>&1ท้าย command เพื่อ debug - Environment ต่าง: Cron ทำงานใน minimal environment ไม่มี PATH เดียวกับ shell
คำถามที่พบบ่อย (FAQ)
Cron Job รันบ่อยที่สุดได้แค่ไหน?
ทุก 1 นาที (*/1 * * * *) คือ minimum บน standard cron แต่หลาย hosting จำกัดไม่ให้รันบ่อยกว่าทุก 5 นาที ตรวจสอบ policy ของ hosting ของคุณก่อน
Cron Job fail แล้วจะรู้ได้ยังไง?
Cron มักส่ง email แจ้งเมื่อ job fail ถ้าตั้ง MAILTO ไว้ หรือเพิ่ม error log redirect ท้าย command: 2>> /tmp/cron-error.log
ถ้า Cron Job ทำงานนานกว่า interval ที่ตั้งจะเป็นยังไง?
Cron จะรัน job ใหม่ทับ job เดิมที่ยังทำงานอยู่ ทำให้อาจเกิด race condition ป้องกันด้วยการใช้ lock file หรือ flock command
Cron Job กับ WordPress Scheduled Posts ต่างกันยังไง?
WordPress Scheduled Posts ใช้ WP-Cron ซึ่งทำงานเมื่อมี visitor มาเว็บ ถ้าเว็บไม่มี traffic บทความอาจ publish ช้า การตั้ง real cron job แทน WP-Cron แก้ปัญหานี้ได้