Hosting

ตั้งค่า Cron Job บน Hosting DirectAdmin ให้ทำงานอัตโนมัติตามเวลา

ตั้งค่า Cron Job บน Hosting DirectAdmin

Cron Job เป็นหนึ่งในเครื่องมือที่ขาดไม่ได้สำหรับเว็บมาสเตอร์ที่ต้องการให้เว็บไซต์ทำงานอัตโนมัติ ตั้งแต่ส่งอีเมล สำรองข้อมูล ล้าง cache ไปจนถึงดึงข้อมูลจาก API ทุกอย่างทำได้โดยไม่ต้องนั่งรอหรือกดด้วยมือ บทความนี้จะอธิบายครบทุกขั้นตอนสำหรับ Hosting ที่ใช้ DirectAdmin

1. Cron Job คืออะไร

Cron คือ time-based job scheduler ในระบบปฏิบัติการ Unix/Linux ส่วน Cron Job คือคำสั่ง script หรือโปรแกรมที่ถูกกำหนดให้ทำงานอัตโนมัติตามตารางเวลาที่ระบุไว้ใน crontab (cron table)

บน Hosting ที่ใช้ DirectAdmin คุณสามารถสร้างและจัดการ Cron Job ได้ผ่านหน้า Control Panel โดยไม่ต้องเข้าถึง server โดยตรง ระบบจะรันคำสั่งของคุณตามเวลาที่กำหนดอย่างแม่นยำ

รู้ไว้: คำว่า "Cron" มาจาก Chronos ซึ่งเป็นเทพแห่งเวลาในตำนานกรีก — สะท้อนถึงหน้าที่หลักของมันที่เกี่ยวกับการจัดการเวลา

2. ทำไมต้องใช้ Cron Job บน Hosting

งานที่ควรใช้ Cron Job แทนการกดด้วยมือมีหลายประเภท:

3. เข้าถึง Cron Jobs ใน DirectAdmin

ขั้นตอนเปิดหน้า Cron Jobs บน DirectAdmin:

  1. เข้าสู่ระบบ DirectAdmin ที่ yourdomain.com:2222
  2. ที่ section Advanced Features คลิก Cron Jobs
  3. หน้าจอจะแสดง Cron Jobs ที่มีอยู่ และฟอร์มสำหรับเพิ่มใหม่
หมายเหตุ: DirectAdmin บาง version อาจอยู่ใน section "Extra Features" หรือ "System Info & Files" ขึ้นอยู่กับ theme ที่ใช้

4. รูปแบบ Cron Expression

Cron Expression ประกอบด้วย 5 ฟิลด์ คั่นด้วยช่องว่าง:

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

อักขระพิเศษที่ใช้ได้:

อักขระความหมายตัวอย่าง
*ทุกค่า* * * * * = ทุกนาที
,หลายค่า0 9,18 * * * = 9 โมง และ 6 โมงเย็น
-ช่วงค่า0 9-17 * * * = ทุกชั่วโมง 9.00–17.00
/ทุกๆ*/15 * * * * = ทุก 15 นาที

5. ตัวอย่าง Cron Job ที่ใช้บ่อย

5.1 รันทุกวันตอนเที่ยงคืน

0 0 * * * /usr/local/bin/php /home/user/public_html/backup.php

5.2 รันทุก 15 นาที

*/15 * * * * /usr/local/bin/php /home/user/public_html/queue.php

5.3 รันทุกวันจันทร์เวลา 8 โมงเช้า

0 8 * * 1 /usr/local/bin/php /home/user/public_html/weekly-report.php

5.4 รันวันที่ 1 ของทุกเดือน

0 1 1 * * /usr/local/bin/php /home/user/public_html/monthly-cleanup.php

5.5 Fetch URL ด้วย wget

*/30 * * * * wget -q -O /dev/null https://yourdomain.com/cron/fetch.php

6. ตั้งค่า Cron Job ทีละขั้นตอน

ขั้นตอนการเพิ่ม Cron Job ใหม่ใน DirectAdmin:

  1. ใน DirectAdmin เปิดหน้า Cron Jobs
  2. กรอกฟิลด์ Minutes เช่น 0 หรือ */15
  3. กรอกฟิลด์ Hours เช่น 2 (ตี 2)
  4. กรอก Day, Month, Weekday ตามต้องการ (ใส่ * หากต้องการทุกวัน/เดือน)
  5. กรอกคำสั่งที่ Command เช่น:
/usr/local/bin/php /home/yourusername/public_html/script.php
  1. คลิก Add เพื่อบันทึก
เคล็ดลับ: ใน DirectAdmin หน้า Cron Jobs จะมีช่อง Email ให้ระบุ email ที่รับ output ของ cron ถ้าต้องการ debug สามารถใส่ email ของคุณได้ชั่วคราว

6.1 หา Path ของ PHP ที่ถูกต้อง

PHP path บน server ที่ใช้บ่อย:

เวอร์ชันPath
PHP 8.3/usr/local/php83/bin/php
PHP 8.2/usr/local/php82/bin/php
PHP 8.1/usr/local/php81/bin/php
PHP default/usr/local/bin/php

สามารถตรวจสอบ PHP path จริงได้โดยขอ Support ของ Hosting หรือดูจาก DirectAdmin → PHP Selector

7. Cron Job สำหรับ WordPress

โดยปกติ WordPress ใช้ WP-Cron ที่ทำงานเมื่อมีผู้เยี่ยมชมเว็บ ซึ่งไม่แม่นยำและเปลืองทรัพยากร วิธีที่ดีกว่าคือ:

7.1 ปิด WP-Cron

เพิ่มบรรทัดนี้ใน wp-config.php ก่อนบรรทัด /* That's all, stop editing! */:

define('DISABLE_WP_CRON', true);

7.2 ตั้ง Real Cron Job ใน DirectAdmin

เพิ่ม Cron Job ที่รันทุก 5 นาที:

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

หรือใช้ wget:

*/5 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
ประโยชน์: Real Cron Job ทำให้ Scheduled Posts ถูก publish ตรงเวลา, อีเมล WooCommerce ส่งได้ทันที และ plugin ที่พึ่ง WP-Cron ทำงานได้ถูกต้อง

8. การตรวจสอบและแก้ไขปัญหา

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

8.1 ตรวจสอบ Output ของ Cron

แก้ Command ให้ redirect error มาที่ไฟล์ log:

/usr/local/bin/php /home/user/public_html/script.php >> /home/user/cron.log 2>&1

แล้วดูไฟล์ cron.log ผ่าน File Manager ใน DirectAdmin

8.2 ปัญหาที่พบบ่อยและวิธีแก้

ปัญหาสาเหตุวิธีแก้
Cron ไม่รันPath PHP ผิดใช้ full path เช่น /usr/local/bin/php
Script errorCode มีบั๊กทดสอบรัน script โดยตรงก่อน
สิทธิ์ถูกปฏิเสธchmod ผิดตั้ง chmod 755 script.php
Memory limitงานหนักเกินลด scope หรือแตก task เล็กลง
รันบ่อยเกินoverlapเพิ่ม lock file ป้องกัน concurrent run

8.3 ใช้ Lock File ป้องกัน Concurrent Run

<?php
$lock = '/tmp/myscript.lock';
if (file_exists($lock)) exit;
touch($lock);
// งานของคุณที่นี่
unlink($lock);
?>

9. ตาราง Cron Expression อ้างอิง

Expressionความหมาย
* * * * *ทุกนาที
*/5 * * * *ทุก 5 นาที
*/15 * * * *ทุก 15 นาที
0 * * * *ทุกชั่วโมง (นาทีที่ 0)
0 0 * * *ทุกวันเที่ยงคืน
0 2 * * *ทุกวันตี 2
0 8 * * 1ทุกวันจันทร์ 8.00 น.
0 0 1 * *วันที่ 1 ของทุกเดือน
0 0 1,15 * *วันที่ 1 และ 15 ของเดือน
0 9-17 * * 1-5ทุกชั่วโมงในเวลางาน วันจ.-ศ.

10. สรุป

Cron Job บน Hosting DirectAdmin เป็นเครื่องมือทรงพลังที่ช่วยให้เว็บไซต์ทำงานอัตโนมัติ สิ่งสำคัญที่ต้องจำ:

  • ใช้ full path สำหรับ PHP เสมอ
  • Redirect output ไปที่ log file เพื่อ debug
  • WordPress ควร disable WP-Cron แล้วใช้ Real Cron แทน
  • ใช้ lock file ป้องกัน concurrent run สำหรับงานที่ใช้เวลานาน
  • เริ่มจาก interval ห่างๆ ก่อน แล้วค่อยปรับตามความต้องการ

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

Cron Job คืออะไร และทำงานอย่างไรบน Hosting?
Cron Job คือคำสั่งหรือ script ที่ถูกกำหนดให้รันโดยอัตโนมัติตามตารางเวลาที่ตั้งไว้ บน Hosting ผ่าน DirectAdmin คุณสามารถตั้ง Cron Job ผ่าน Control Panel ได้โดยตรง โดยระบุเวลา (นาที ชั่วโมง วัน เดือน วันในสัปดาห์) และคำสั่งที่ต้องการรัน
Cron Job บน DirectAdmin ต่างกับ VPS อย่างไร?
บน Hosting DirectAdmin คุณตั้ง Cron Job ผ่านหน้า Control Panel โดยไม่ต้องแตะ server โดยตรง แต่จะมีข้อจำกัดเรื่องสิทธิ์และทรัพยากร VPS มีอิสระมากกว่าเพราะสามารถแก้ไข crontab ระดับ system ได้
Cron Expression 5 ฟิลด์หมายความว่าอะไร?
Cron Expression มี 5 ฟิลด์: นาที (0-59), ชั่วโมง (0-23), วันที่ (1-31), เดือน (1-12), วันในสัปดาห์ (0-7 โดย 0 และ 7 คือวันอาทิตย์) เช่น 0 2 * * * หมายถึงรันทุกวันตอนตี 2
ตั้ง WordPress Cron บน DirectAdmin ต้องทำอย่างไร?
ให้ disable WP-Cron ใน wp-config.php โดยเพิ่ม define('DISABLE_WP_CRON', true); แล้วตั้ง Cron Job จริงใน DirectAdmin ให้รัน php ไปที่ wp-cron.php ทุก 5–15 นาที
ทำไม Cron Job ไม่ทำงานทั้งที่ตั้งค่าถูกต้องแล้ว?
สาเหตุที่พบบ่อย: 1) Path ของ PHP ไม่ถูกต้อง ควรใช้ path เต็มเช่น /usr/local/bin/php 2) สิทธิ์ไฟล์ script ไม่ถูก ต้องเป็น chmod 755 3) Script มี error ให้ redirect output มาดู 4) ทรัพยากร hosting ไม่เพียงพอในเวลานั้น
Cron Job ที่รันผิดพลาดจะทำให้ hosting มีปัญหาไหม?
หาก Cron Job ใช้ทรัพยากรมากหรือรันบ่อยเกินไป อาจกระทบ hosting ได้ ควรตั้ง output redirect เพื่อ debug และกำหนดเวลาให้ห่างกันพอ ไม่ควรรันทุก 1 นาทีสำหรับงานหนัก