ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ตั้งค่า Cronjob บน DirectAdmin

ตั้งค่า Cronjob บน DirectAdmin

Cronjob คือการตั้งให้เซิร์ฟเวอร์รันคำสั่งหรือสคริปต์เองตามเวลาที่กำหนด เช่น รันไฟล์ PHP ส่งอีเมลสรุปทุกเช้า ล้างไฟล์ Cache ทุกชั่วโมง หรือเรียก wp-cron.php ของ WordPress ให้ทำงานตรงเวลาแทนการรอผู้เข้าชมเว็บ บน DirectAdmin คุณตั้ง Cronjob ได้จากหน้า Control Panel โดยไม่ต้องใช้ SSH

บทความนี้อธิบายรูปแบบเวลาของ Cron การเพิ่ม Cronjob ใน DirectAdmin แบบ Evolution skin ตัวอย่างคำสั่งที่ใช้บ่อย และวิธีตรวจว่า Cronjob ทำงานจริง หากคุณใช้ Plesk ดูคู่มือ วิธีตั้งค่า Cronjob บน Plesk Control Panel Hosting และหากใช้ Linux Server ที่ไม่มี Control Panel ดู วิธีตั้ง Cronjob หรือ Crontab บน Linux

สิ่งที่ต้องเตรียม

  • บัญชี DirectAdmin ระดับ User ที่แพ็กเกจเปิดสิทธิ์ Cronjobs ไว้
  • path เต็มของสคริปต์ที่ต้องการรัน เช่น /home/ชื่อผู้ใช้/domains/example.com/public_html/cron.php
  • ทดสอบให้แน่ใจก่อนว่าสคริปต์ทำงานถูกต้องเมื่อรันด้วยมือ

ขั้นตอนที่ 1: เข้าใจรูปแบบเวลาของ Cron

Cron ใช้ 5 ช่องกำหนดเวลา เรียงจากซ้ายไปขวาดังนี้

ช่องความหมายค่าที่ใส่ได้
Minuteนาที0-59
Hourชั่วโมง0-23
Day of Monthวันที่1-31
Monthเดือน1-12
Day of Weekวันในสัปดาห์0-6 (0 คือวันอาทิตย์)

เครื่องหมาย * หมายถึงทุกค่า */15 หมายถึงทุก 15 หน่วย 1,15 หมายถึงค่า 1 และ 15 และ 1-5 หมายถึงช่วง 1 ถึง 5 ตัวอย่างที่ใช้บ่อย

MinuteHourDay of MonthMonthDay of Weekความหมาย
*/5****ทุก 5 นาที
0****ต้นชั่วโมงทุกชั่วโมง
302***ทุกวันเวลา 02:30
08**1-5จันทร์ถึงศุกร์ เวลา 08:00
001**วันที่ 1 ของทุกเดือน เวลาเที่ยงคืน

หมายเหตุ: เวลาของ Cronjob เป็นเวลาตาม Timezone ของเซิร์ฟเวอร์ ไม่ใช่เวลาในเครื่องของคุณ หากเซิร์ฟเวอร์ตั้งเป็น UTC เวลา 02:30 ของ Cron จะตรงกับ 09:30 ตามเวลาประเทศไทย ผู้ที่ดูแลเซิร์ฟเวอร์เองตรวจได้ด้วยคำสั่ง timedatectl

ขั้นตอนที่ 2: เพิ่ม Cronjob ใน DirectAdmin

  1. ล็อกอิน DirectAdmin แล้วไปที่หมวด Advanced Features คลิก Cronjobs (หรือพิมพ์ cron ในช่องค้นหาด้านบน)
  2. คลิก Create Cron Job (บางเวอร์ชันแสดงฟอร์มเพิ่มไว้ที่หน้าเดียวกันเลย)
  3. กรอก Minute, Hour, Day of Month, Month และ Day of Week ตามตารางในขั้นตอนที่ 1
  4. ในช่อง Command ใส่คำสั่งเต็ม ตัวอย่างอยู่ในขั้นตอนที่ 3
  5. หากไม่ต้องการรับอีเมลแจ้งผลทุกครั้งที่ Cron ทำงาน ให้ติ๊ก Prevent E-mail ระบบจะต่อท้ายคำสั่งด้วย >/dev/null 2>&1 ให้
  6. กด Create

ด้านบนของหน้า Cronjobs มีช่องกำหนดอีเมลที่จะรับผลลัพธ์ (output) ของทุก Cronjob ในบัญชี ในช่วงทดสอบแนะนำให้ใส่อีเมลของคุณและยังไม่ติ๊ก Prevent E-mail เพื่อจะได้เห็นข้อความ Error หากคำสั่งผิด เมื่อแน่ใจว่าทำงานถูกต้องแล้วจึงปิดอีเมล เพื่อไม่ให้กล่องจดหมายเต็ม

ขั้นตอนที่ 3: ตัวอย่างคำสั่งที่ใช้บ่อย

รันไฟล์ PHP

/usr/local/bin/php /home/acme/domains/example.com/public_html/cron.php

บนเซิร์ฟเวอร์ DirectAdmin ส่วนใหญ่ PHP แบบ command-line อยู่ที่ /usr/local/bin/php หากติดตั้ง PHP หลายเวอร์ชัน อาจมี path แยก เช่น /usr/local/php82/bin/php หรือ /usr/local/php83/bin/php ตรวจ path ที่ถูกต้องกับผู้ให้บริการ หรือใช้ SSH ด้วยคำสั่ง ls /usr/local/php*/bin/php เปลี่ยน acme เป็นชื่อผู้ใช้ DirectAdmin ของคุณ

ให้ WordPress รันงานตามเวลาจริง

โดยปกติ WordPress จะเช็กงานที่ตั้งเวลาไว้ (เช่น โพสต์ตั้งเวลา การสำรองข้อมูลของปลั๊กอิน) เฉพาะเมื่อมีคนเปิดเว็บ เว็บที่มีผู้เข้าชมน้อยจึงทำงานไม่ตรงเวลา ให้เพิ่มบรรทัดนี้ใน wp-config.php เหนือบรรทัด /* That's all, stop editing! */

define( 'DISABLE_WP_CRON', true );

แล้วสร้าง Cronjob ทุก 5 หรือ 15 นาที ด้วยคำสั่ง

/usr/local/bin/php /home/acme/domains/example.com/public_html/wp-cron.php

เรียก URL

บางแอปให้เรียก URL แทนการรันไฟล์ ใช้ curl ได้ดังนี้ ใส่ URL ในเครื่องหมายคำพูดเสมอหากมีเครื่องหมาย & หรือ ?

curl -fsS "https://example.com/index.php?option=cron&key=YOUR_KEY" >/dev/null

เก็บผลลัพธ์ลงไฟล์ Log

/usr/local/bin/php /home/acme/domains/example.com/public_html/cron.php >> /home/acme/cron.log 2>&1

วิธีนี้สะดวกกว่าอีเมลเมื่อ Cron รันถี่ เพราะดูย้อนหลังได้ในไฟล์เดียว อย่าลืมลบหรือหมุนเวียนไฟล์ Log เป็นระยะ

หมายเหตุ: ในช่อง Command เครื่องหมาย % มีความหมายพิเศษสำหรับ Cron (ขึ้นบรรทัดใหม่) หากคำสั่งมี % เช่น date +%F ต้องเขียนเป็น \%

ตรวจสอบผลลัพธ์

  • ในหน้า Cronjobs จะเห็นงานที่สร้างในรายการพร้อมเวลาและคำสั่ง
  • ตั้งเวลาเป็นทุก 5 นาทีชั่วคราว แล้วรอให้ถึงรอบ หากไม่ได้ติ๊ก Prevent E-mail และสคริปต์มี output คุณจะได้รับอีเมลจาก Cron Daemon
  • ถ้าใช้ไฟล์ Log ให้เปิดไฟล์ cron.log ด้วย File Manager แล้วดูว่ามีข้อความเพิ่มตามรอบเวลา
  • ตรวจผลที่เกิดขึ้นจริง เช่น โพสต์ตั้งเวลาเผยแพร่ตรงเวลา หรือไฟล์สำรองถูกสร้างขึ้น
  • เมื่อทดสอบเสร็จ อย่าลืมแก้เวลากลับเป็นค่าที่ต้องการจริง

ปัญหาที่พบบ่อย

ได้อีเมลว่า No such file or directory หรือ command not found

path ของ PHP หรือของสคริปต์ผิด Cron ไม่รู้จัก path สั้นแบบที่ใช้ใน Terminal ให้ใช้ path เต็มทุกครั้ง และตรวจตัวพิมพ์เล็กใหญ่ให้ตรงกับชื่อจริง

สคริปต์รันด้วยมือได้ แต่ใน Cron ไม่ทำงานหรือหาไฟล์ไม่เจอ

Cron ไม่ได้เริ่มทำงานในโฟลเดอร์ของสคริปต์ หากสคริปต์เรียกไฟล์อื่นแบบ path สัมพัทธ์ เช่น include 'config.php' จะหาไม่เจอ ให้แก้สคริปต์ให้ใช้ __DIR__ หรือเขียนคำสั่งเป็น cd /home/acme/domains/example.com/public_html && /usr/local/bin/php cron.php

Cron ทำงานผิดเวลา

เกิดจาก Timezone ของเซิร์ฟเวอร์ต่างจากเวลาไทย ให้คำนวณเวลาใหม่ตาม Timezone ของเซิร์ฟเวอร์ หรือสอบถามผู้ให้บริการว่าเซิร์ฟเวอร์ใช้ Timezone ใด

กล่องอีเมลเต็มไปด้วยอีเมลจาก Cron

ติ๊ก Prevent E-mail ให้ Cronjob นั้น หรือเปลี่ยนไปเก็บผลลัพธ์ลงไฟล์ Log แทน

หากตั้งค่าแล้ว Cronjob ยังไม่ทำงาน ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ พร้อมแจ้งคำสั่งที่ใช้และข้อความในอีเมลแจ้งผลจาก Cron

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security