Hosting

ตั้งค่า Cron Job บน DirectAdmin Hosting
สำหรับงานอัตโนมัติ

📅 3 พฤศจิกายน 2569 ⏱️ อ่าน 12 นาที 🏷️ Cron Job DirectAdmin Automation
ตั้งค่า Cron Job บน DirectAdmin Hosting สำหรับงานอัตโนมัติ

Cron Job คืออะไร ทำไมถึงสำคัญ

Cron Job คือระบบ task scheduler บน Linux ที่ช่วยให้คุณสั่งให้โปรแกรมหรือ script รันอัตโนมัติตามเวลาที่กำหนดไว้ล่วงหน้า คำว่า "Cron" มาจาก Chronos (เทพแห่งเวลาของกรีก) และ "crontab" คือไฟล์ที่เก็บรายการงานเหล่านี้

ในบริบทของ Web Hosting งาน Cron Job มีประโยชน์มหาศาล ไม่ว่าจะเป็นการ backup ฐานข้อมูลอัตโนมัติทุกคืน การส่งอีเมลรายงานทุกสัปดาห์ หรือการลบไฟล์ temp ที่เก่าเพื่อประหยัดพื้นที่

✅ ตัวอย่างงานที่เหมาะกับ Cron Job:
  • Backup ฐานข้อมูล MySQL ทุกคืนเวลา 02:00 น.
  • ส่งอีเมล newsletter ทุกวันจันทร์เวลา 09:00 น.
  • ลบไฟล์ session/tmp ที่เก่ากว่า 7 วัน
  • ดึงข้อมูลจาก API ภายนอกทุก 30 นาที
  • รีเจน sitemap.xml ทุก 6 ชั่วโมง

บน AsiaGB Hosting ที่ใช้ DirectAdmin เป็น control panel คุณสามารถตั้งค่า Cron Job ได้ผ่านหน้า GUI ได้เลยโดยไม่ต้องเข้า SSH หรือแก้ crontab ด้วยตนเอง

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

Cron syntax ประกอบด้วย 5 ตำแหน่ง ตามด้วยคำสั่งที่ต้องการรัน แต่ละตำแหน่งแทนหน่วยเวลาที่แตกต่างกัน:

* * * * *  /คำสั่ง/ที่/ต้องการรัน
│ │ │ │ │
│ │ │ │ └── วันในสัปดาห์ (0-7) (0 และ 7 = อาทิตย์)
│ │ │ └──── เดือน (1-12)
│ │ └────── วันในเดือน (1-31)
│ └──────── ชั่วโมง (0-23)
└────────── นาที (0-59)

ตัวอักษรพิเศษใน Cron

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

การตั้งค่า Cron Job บน DirectAdmin ทำได้ง่ายมาก ทำตามขั้นตอนนี้:

  1. Login เข้า DirectAdmin Panel ที่ yourdomain.com:2222
  2. ไปที่เมนู Advanced Features
  3. คลิก Cron Jobs
  4. กรอกค่าในช่อง Minute, Hour, Day, Month, Weekday
  5. กรอกคำสั่งในช่อง Command
  6. คลิก Add เพื่อบันทึก
💡 เคล็ดลับ: DirectAdmin ยังมีฟีเจอร์ส่ง email เมื่อ Cron รันเสร็จ ซึ่งมีประโยชน์มากสำหรับการ debug หากไม่ต้องการรับ email ทุกครั้ง ให้เพิ่ม >/dev/null 2>&1 ต่อท้ายคำสั่ง

รัน PHP Script ผ่าน Cron Job

การรัน PHP script ผ่าน Cron มีวิธีหลักสองแบบ ได้แก่ PHP CLI และ curl/wget:

วิธีที่ 1: PHP CLI (แนะนำ)

/usr/local/bin/php /home/USERNAME/public_html/cron/backup.php

แทน USERNAME ด้วยชื่อ DirectAdmin account ของคุณ และปรับ path ของ script ให้ถูกต้อง

วิธีที่ 2: Curl เรียก URL

curl -s https://yourdomain.com/cron/backup.php > /dev/null 2>&1

วิธีนี้ง่ายแต่ต้องระวังเรื่อง security เพราะ URL เปิดเป็น public เข้าได้ได้

ตรวจสอบ PHP path บน DirectAdmin

หาก path PHP ไม่แน่ใจ ให้สร้างไฟล์ phpinfo.php และเช็ค แต่โดยทั่วไปบน DirectAdmin จะอยู่ที่:

Use Case ที่ใช้บ่อยบน Hosting

1. Backup ฐานข้อมูล MySQL ทุกคืน

0 2 * * * /usr/local/bin/php /home/USERNAME/public_html/backup-db.php

รันทุกวันเวลา 02:00 น. — เหมาะสำหรับ Hosting ที่ traffic น้อยตอนดึก

2. ส่งอีเมลรายสัปดาห์

0 9 * * 1 /usr/local/bin/php /home/USERNAME/public_html/send-newsletter.php

รันทุกวันจันทร์เวลา 09:00 น.

3. ลบไฟล์ cache เก่า

0 */6 * * * /usr/bin/find /home/USERNAME/public_html/cache/ -mtime +7 -delete

รันทุก 6 ชั่วโมง ลบไฟล์ที่เก่ากว่า 7 วัน

4. WordPress WP-Cron

*/15 * * * * /usr/local/bin/php /home/USERNAME/public_html/wp-cron.php > /dev/null 2>&1

รัน WP-Cron ทุก 15 นาที แนะนำให้ปิด WP-Cron อัตโนมัติของ WordPress แล้วใช้วิธีนี้แทนเพื่อประสิทธิภาพที่ดีกว่า

5. รีเจน Sitemap

0 */6 * * * /usr/local/bin/php /home/USERNAME/public_html/sitemap-generate.php

รีเจน sitemap ทุก 6 ชั่วโมง เพื่อให้ Google Crawl ได้ข้อมูลล่าสุด

ตาราง Cron Syntax พร้อมตัวอย่าง

Cron ExpressionความหมายUse Case
* * * * *ทุก 1 นาทีMonitoring / health check
*/5 * * * *ทุก 5 นาทีดึงข้อมูล API
*/15 * * * *ทุก 15 นาทีWP-Cron
0 * * * *ทุกชั่วโมง (นาที 0)Cache clear
0 */6 * * *ทุก 6 ชั่วโมงSitemap regen
0 2 * * *ทุกวัน เวลา 02:00Backup รายวัน
0 9 * * 1ทุกวันจันทร์ 09:00Weekly report
0 0 1 * *วันที่ 1 ของทุกเดือนMonthly summary
0 0 1,15 * *วันที่ 1 และ 15 ทุกเดือนBackup 2 ครั้ง/เดือน
0 8-17 * * 1-5ทุกชั่วโมง วันทำงาน 08-17Business hour task

แก้ปัญหา Cron ไม่ทำงาน

หาก Cron Job ที่ตั้งไว้ไม่ทำงานตามที่คาด ให้ตรวจสอบตามลำดับนี้:

1. ตรวจสอบ Path ที่ถูกต้อง

Cron ทำงานใน environment ที่จำกัดกว่า shell ปกติ ตัวแปร $PATH จะไม่ถูกตั้งค่าเหมือนตอน login ดังนั้นให้ระบุ full path เสมอ:

# ❌ อาจไม่ทำงาน
php /home/user/backup.php

# ✅ ถูกต้อง
/usr/local/bin/php /home/user/public_html/backup.php

2. ตรวจสอบ Permission

chmod 755 /home/USERNAME/public_html/cron/backup.php

script ต้องมีสิทธิ์ execute สำหรับเจ้าของไฟล์

3. ดู Email Log จาก Cron

โดย default Cron จะส่ง email ไปยัง email ที่ตั้งใน DirectAdmin เมื่อมี output จาก script ให้ตรวจสอบ inbox เพื่อดู error message

4. ทดสอบ Script ใน SSH ก่อน

/usr/local/bin/php /home/USERNAME/public_html/cron/backup.php

รันตรงใน SSH terminal เพื่อดูว่า script ทำงานได้หรือเปล่า ถ้า error ให้แก้ script ก่อน

5. ตรวจสอบเวลา Server

⚠️ ระวัง: Server ของ AsiaGB ใช้ timezone UTC+7 (Asia/Bangkok) ตรงกับเวลาไทยพอดี แต่ถ้าเคย host อยู่ที่อื่นต้องระวังเรื่อง timezone ที่อาจต่างกัน

Best Practices และข้อควรระวัง

อย่ารัน Cron บ่อยเกินไป

Cron ที่รันทุก 1 นาทีและทำงานนาน 5 นาที จะทำให้มีหลาย instance รันพร้อมกัน ซึ่งกินทรัพยากร Hosting และอาจทำให้เว็บช้าลง ให้ประเมินว่าต้องการความถี่เท่าไรจริงๆ

ใช้ Redirect Output

# เก็บ log ไว้ดู
0 2 * * * /usr/local/bin/php /home/USER/backup.php >> /home/USER/cron.log 2>&1

# ไม่ต้องการ output เลย
0 2 * * * /usr/local/bin/php /home/USER/backup.php > /dev/null 2>&1

ทดสอบก่อน deploy

รัน script ด้วยมือก่อนเสมอ เพื่อให้แน่ใจว่าไม่มี error ก่อนตั้ง Cron

ตรวจสอบ Resource Limit

Hosting บางแพ็กเกจอาจมีการจำกัดจำนวน Cron Jobs หรือ CPU time ให้ตรวจสอบ spec ของแพ็กเกจที่ใช้อยู่ และหลีกเลี่ยงการรัน heavy task ในช่วงชั่วโมง peak

💡 สำหรับ WordPress: แนะนำให้ปิด WP-Cron อัตโนมัติใน wp-config.php แล้วใช้ Server Cron แทน โดยเพิ่ม define('DISABLE_WP_CRON', true); แล้วตั้ง Cron Job ที่ DirectAdmin เรียก wp-cron.php แทน — วิธีนี้เสถียรกว่าและไม่กิน resource เวลา visitor เข้าเว็บ

คำถามที่พบบ่อย (FAQ)

Cron Job คืออะไร

Cron Job คืองานที่กำหนดให้รันอัตโนมัติตามเวลาที่ตั้งไว้บน Linux server เช่น ทุกวัน ทุกชั่วโมง หรือทุกนาที โดยใช้ cron daemon ในการควบคุม

DirectAdmin รองรับ Cron Job ไหม

รองรับครับ DirectAdmin มี Cron Jobs manager ในหน้าควบคุมโดยตรง ผู้ใช้สามารถตั้งค่าได้ง่ายโดยไม่ต้องแก้ไฟล์ crontab ด้วยตนเอง

Cron syntax 5 ตำแหน่งหมายถึงอะไร

5 ตำแหน่งของ cron syntax คือ นาที (0-59), ชั่วโมง (0-23), วันในเดือน (1-31), เดือน (1-12), วันในสัปดาห์ (0-7) ตามลำดับ เช่น 0 2 * * * = ทุกวัน เวลา 02:00 น.

ทำไม Cron Job ถึงไม่ทำงาน

สาเหตุที่พบบ่อยคือ path ไฟล์ไม่ถูกต้อง, script ไม่มีสิทธิ์ execute (chmod), PHP version ไม่ตรงกับที่ตั้งไว้ หรือ syntax ผิดในคำสั่ง ให้ตรวจสอบ log email จาก cron ด้วย

Cron Job กินทรัพยากร Hosting ไหม

Cron Job ที่รันบ่อยเกินไปหรือใช้เวลาประมวลผลนานอาจกิน CPU และ memory ของ Hosting ได้ ควรตั้งความถี่ให้เหมาะสม และหลีกเลี่ยงการรัน Cron ที่ heavy ในชั่วโมง peak

สามารถรัน PHP script ผ่าน Cron ได้ไหม

ได้ครับ ใช้คำสั่ง /usr/local/bin/php /home/USER/public_html/script.php หรือใช้ wget/curl เรียก URL ของ script ก็ได้ แต่วิธี PHP CLI ตรงกว่าและปลอดภัยกว่า


ต้องการใช้ Hosting ที่รองรับ Cron Job ผ่าน DirectAdmin? ดูแพ็กเกจ Hosting ของ AsiaGB →