วิธีตั้งค่า Cron Jobs ใน DirectAdmin

Cron Job คือการตั้งเวลาให้ระบบรันสคริปต์หรือคำสั่งโดยอัตโนมัติตามช่วงเวลาที่กำหนด เหมาะสำหรับ: ส่งอีเมลอัตโนมัติ, สร้าง Backup, อัปเดตข้อมูล, ลบไฟล์ชั่วคราว

วิธีเพิ่ม Cron Job

  1. ล็อกอิน DirectAdmin แล้วไปที่ Advanced Features
  2. คลิก Cron Jobs
  3. คลิก Add New Cron Job
  4. กรอก Cron Expression และ Command
  5. คลิก Add
หน้า Cron Jobs แสดง Cron ที่ตั้งค่าไว้ทั้งหมด
หน้า Cron Jobs แสดง Cron ที่ตั้งค่าไว้ทั้งหมด
กดปุ่ม Add Cron Job (วงแดง) เพื่อเพิ่ม Cron ใหม่
กดปุ่ม Add Cron Job (วงแดง) เพื่อเพิ่ม Cron ใหม่
กรอกเวลาและคำสั่ง (Command) แล้วกด Add
กรอกเวลาและคำสั่ง (Command) แล้วกด Add

ทำความเข้าใจ Cron Syntax

รูปแบบ Cron ประกอบด้วย 5 ช่อง: นาที ชั่วโมง วันที่ เดือน วันในสัปดาห์

ตัวอย่าง Cron Jobs ที่ใช้บ่อย

รัน PHP Script ทุกชั่วโมง:

/usr/bin/php /home/username/public_html/cron.php

รัน WordPress WP-Cron ทุก 5 นาที:

*/5 * * * * /usr/bin/php /home/username/public_html/wp-cron.php

เคล็ดลับ: ใช้ /usr/bin/php แทน php เสมอเพื่อให้ Cron หาโปรแกรมเจอ และตรวจสอบ Email ที่ตั้งใน DirectAdmin เพราะ Cron จะส่ง Output ไปที่ Email ทุกครั้งที่รัน (ตั้ง MAILTO="" เพื่อปิด)

Cron Job คืออะไรและใช้งานได้กับอะไรบ้าง

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

งานที่นิยมใช้ Cron Job ในการโฮสติ้งได้แก่:

ข้อดีของ Cron คือทำงานได้แม้ไม่มีใคร Login เข้าเว็บไซต์ และรันได้ทุกวันตลอด 24 ชั่วโมงโดยไม่ต้องอาศัยผู้เยี่ยมชมมากระตุ้น ต่างจาก WordPress WP-Cron ที่ต้องรอให้มีคนเข้าเว็บก่อน

อ่านและเขียน Cron Expression ให้ถูกต้อง

Cron Expression ประกอบด้วย 5 ช่องข้อมูลเรียงติดกัน คั่นด้วยช่องว่าง แต่ละช่องควบคุมมิติเวลาที่แตกต่างกัน ก่อนใส่ค่าใดๆ ต้องเข้าใจความหมายของแต่ละตำแหน่งก่อน:

สัญลักษณ์พิเศษที่ควรรู้

ตัวอย่างที่ใช้บ่อย

การ Debug Cron Job ที่ไม่รัน

หนึ่งในปัญหาที่พบบ่อยที่สุดคือตั้ง Cron ไว้แล้วแต่ดูเหมือนไม่มีอะไรเกิดขึ้น สาเหตุส่วนใหญ่มาจากสิ่งเหล่านี้:

1. ปัญหา PATH Environment

เมื่อ Cron รันคำสั่ง ระบบไม่ได้โหลด Shell Environment เหมือนตอนที่คุณ Login ผ่าน SSH ดังนั้นตัวแปร PATH ที่กำหนดใน .bashrc หรือ .bash_profile จะไม่มีผล คำสั่ง php, python3, mysql จะหาไม่เจอ ต้องระบุ full path เสมอ:

2. Redirect Output เพื่อดู Error

Cron ไม่แสดง output บนหน้าจอ ถ้าสคริปต์มี error คุณจะไม่เห็นอะไรเลยหากไม่ redirect output ออกมา ให้เพิ่ม redirect ต่อท้าย command:

/usr/bin/php /home/user/public_html/cron.php >> /tmp/mycron.log 2>&1

>> หมายถึง append ต่อท้าย log file และ 2>&1 หมายถึงให้ error output ไปที่เดียวกับ standard output เมื่อ Cron รันแล้ว ให้เปิดไฟล์ /tmp/mycron.log ผ่าน File Manager เพื่อดูว่าเกิดอะไรขึ้น

3. Permission และ Memory Limit

ตรวจสอบว่าไฟล์สคริปต์มีสิทธิ์ Execute (chmod 644 หรือ 755) และค่า memory limit ใน PHP ไม่เกินที่ Hosting กำหนด สคริปต์ที่ใช้ memory เกินลิมิตจะหยุดกลางคันโดยไม่มี error แจ้ง

Best Practices สำหรับ Cron บน Shared Hosting

เมื่อใช้งาน Cron บน Shared Hosting มีข้อควรระวังเพิ่มเติมจาก VPS หรือ Dedicated Server เพราะทรัพยากรถูกแบ่งใช้ร่วมกัน:

ใช้ PHP Path ที่ถูกต้อง

บน Shared Hosting DirectAdmin มักมี PHP หลายเวอร์ชันพร้อมกัน เช่น /usr/bin/php74, /usr/bin/php81, /usr/bin/php83 ควรระบุเวอร์ชันให้ตรงกับที่เว็บไซต์ใช้ เพราะถ้าเรียก php เฉยๆ อาจได้เวอร์ชัน default ที่ต่างจาก PHP ที่เว็บใช้อยู่ ทำให้เกิด error

ป้องกัน Cron ซ้อนกัน (Overlap)

ถ้าสคริปต์ใช้เวลานานกว่า Interval ที่ตั้ง เช่น ตั้งให้รันทุก 5 นาที แต่สคริปต์ใช้เวลา 8 นาที จะเกิด Cron ซ้อนกัน 2 instance ทำให้โหลดเซิร์ฟเวอร์พุ่ง แก้โดยใช้ File Lock หรือ PID file ในสคริปต์เพื่อป้องกันการรันซ้ำ

ตั้ง Memory Limit และ Time Limit

ใส่ค่า limit ไว้ต้นสคริปต์ PHP เพื่อป้องกันการใช้ทรัพยากรเกิน:

ini_set('memory_limit', '128M');
set_time_limit(300);

ปิด Email Output หลังทดสอบผ่านแล้ว

ตอนทดสอบ Cron ใหม่ ให้ตั้ง Email Output ไว้รับ error แต่เมื่อมั่นใจแล้วว่าทำงานถูกต้อง ควรปิด Email ด้วย MAILTO="" ต้นบรรทัด command หรือ redirect output ไปที่ /dev/null เพื่อไม่ให้กล่อง Email เต็มจากการรันทุกวัน

หลีกเลี่ยงการรัน Cron บ่อยเกินไป

บน Shared Hosting ไม่ควรตั้ง Cron ให้รันถี่กว่าทุก 5 นาที เพราะอาจกระทบ User อื่นบนเซิร์ฟเวอร์เดียวกัน หากต้องการ Task ที่รันถี่มาก เช่น ทุกนาที ควรพิจารณาอัปเกรดเป็น VPS เพื่อให้มีทรัพยากรเป็นของตัวเอง

ตัวอย่าง Cron Job สำหรับงาน Hosting ทั่วไป

เมื่อเข้าใจ Cron Syntax และ Best Practices แล้ว ตัวอย่างต่อไปนี้เป็น Command จริงที่ใช้งานได้บน DirectAdmin Hosting ครอบคลุมงานประจำที่เว็บมาสเตอร์ต้องการทำอัตโนมัติมากที่สุด:

Weekly Backup — สำรองข้อมูลทุกสัปดาห์

รันทุกวันอาทิตย์เวลา 02:30 น. เพื่อสำรอง MySQL database:

30 2 * * 0 /usr/bin/mysqldump -u username -p'password' dbname >> /home/username/backups/db-backup.sql

Daily Log Cleanup — ลบ Log ไฟล์เก่าทุกวัน

รันทุกคืนเพื่อลบไฟล์ Log ที่เก่ากว่า 30 วันในโฟลเดอร์ logs/:

0 3 * * * /usr/bin/find /home/username/public_html/logs/ -name "*.log" -mtime +30 -delete

Cache Purge — ล้าง Cache ทุก 6 ชั่วโมง

รัน PHP script เพื่อลบไฟล์ Cache ที่หมดอายุแล้วทุก 6 ชั่วโมง:

0 */6 * * * /usr/bin/php /home/username/public_html/scripts/clear-cache.php

Sitemap Regenerate — อัปเดต Sitemap ทุกคืน

รันทุกคืนเวลา 01:00 น. เพื่อสร้าง sitemap.xml ใหม่จากฐานข้อมูล:

0 1 * * * /usr/bin/php /home/username/public_html/sitemap-generate.php >> /tmp/sitemap.log 2>&1

การตั้ง Cron แต่ละตัวให้ทำงานในช่วงเวลาที่ต่างกัน (02:30, 03:00, 06:00, 01:00) ช่วยกระจาย Load บนเซิร์ฟเวอร์ ไม่ให้งานหลาย Task ชนกันพร้อมกันในช่วงเวลาเดียว

ต้องการ Hosting รองรับ Cron Jobs?

AsiaGB Hosting รองรับ Cron Jobs ทุกแพ็กเกจ พร้อม PHP และ DirectAdmin ใช้งานง่าย

ดูแพ็กเกจ Hosting