WP-Cron (wp-cron.php): ปิดการทำงานและตั้งค่า Cron ของระบบ | ปรับแต่งประสิทธิภาพ WordPress

ประกาศแอฟฟิลิเอต Ver 3.1
ประกาศแอฟฟิลิเอต Ver 3.2 (เฉพาะมือถือ)

ใน WordPress งาน Cron คือฟีเจอร์ที่รันงานซึ่งตั้งเวลาไว้ตามเวลาหรือวันที่ที่กำหนดโดยอัตโนมัติ งานนี้ทำงานผ่านไฟล์ wp-cron.php และ WordPress จะเรียกไฟล์นี้ทุกครั้งที่หน้าเว็บโหลดเพื่อประมวลผลงานที่ตั้งเวลาไว้ วิธีนี้สะดวก แต่ในเว็บไซต์ที่มีทราฟฟิกสูงอาจทำให้ประสิทธิภาพลดลง

Ⅰ. ขั้นตอนการทำงานของ WP-Cron และปัญหาด้านประสิทธิภาพ

WordPress ไม่ได้ใช้ระบบ Cron แบบดั้งเดิมของเซิร์ฟเวอร์ Linux แต่มีฟีเจอร์ Cron ของตัวเองคือ WP-Cron ซึ่งทำงานผ่านไฟล์ wp-cron.php โดย ⓐ ทุกครั้งที่ผู้ใช้เข้าชมเว็บไซต์ จะตรวจว่ามีงานที่ตั้งเวลาไว้หรือไม่แล้วรันงานนั้น และ ⓑ ปลั๊กอินอย่าง Rank Math และ WP Rocket จะรันงานตามรอบที่ตั้งเวลาไว้เอง

ในทางกลับกัน บนเว็บไซต์ที่มีทราฟฟิกสูง wp-cron.php อาจถูกเรียกบ่อยเกินไปจนทำให้เซิร์ฟเวอร์รับภาระหนัก โดยเฉพาะเมื่อมีผู้ใช้เข้ามาพร้อมกันหลายคน งาน Cron ที่ซ้ำกันจะถูกรัน ซึ่งอาจนำไปสู่ การใช้ CPU ที่เพิ่มขึ้น, การตอบสนองที่ล่าช้า, ความเร็วในการโหลดหน้าที่ลดลง และปัญหาอื่น ๆ

ข้อจำกัดเชิงโครงสร้างของ WP-Cron นี้อาจทำให้ประสิทธิภาพของ WordPress ลดลง โดยเฉพาะใน เว็บไซต์ที่ต้องการประสิทธิภาพสูง ร้านค้าออนไลน์ หรือพอร์ทัลข่าว ซึ่งอาจเกิดคอขวดร้ายแรงได้

🔄 วิธีการทำงานและโครงสร้างของ WP-Cron

WP-Cron
WP-Cron(wp-cron.php)
ⓐ ตรวจงานที่ตั้งเวลาไว้เมื่อมีผู้เข้าชม
ⓑ งานตามรอบของปลั๊กอิน(Rank Math, WP Rocket ฯลฯ)
ปัญหาด้านประสิทธิภาพของ WP-Cron
ขึ้นอยู่กับทราฟฟิก
เซิร์ฟเวอร์รับภาระเกินเพราะถูกเรียกมากเกินไป
การรันซ้ำและคอขวด
วิธีการทำงานของ WP-Cron
ตัวตั้งเวลาเสมือนที่อิงทราฟฟิก
ลำดับการทำงานของงานที่ตั้งเวลาไว้
ทำงานตามการเข้าชม ไม่ใช่ตามเวลา

Ⅱ. ปรับแต่งประสิทธิภาพ WordPress

  • ↳ ปรับแต่งผ่านการตั้งค่า WP-Cron

การปรับแต่งประสิทธิภาพ WordPress มีหลายวิธี หลังจากปรับแต่งแคช ฟรอนต์เอนด์ และฐานข้อมูลแล้ว ยังปรับปรุงต่อได้ด้วยการตั้งค่า WP-Cron

WordPress
ปรับแต่งประสิทธิภาพ
แคชเบราว์เซอร์
แคชหน้าเว็บ
ปรับแต่งฟรอนต์เอนด์
ปลั๊กอินที่เกี่ยวข้อง(Autoptimize, ShortPixel ฯลฯ)
ล้างฐานข้อมูล
ลบรีวิชัน/สแปม/ตารางชั่วคราว
ปลั๊กอินปรับแต่ง DB(WP-Optimize ฯลฯ)
ตั้งค่า WP-Cron
WP-Cron(wp-cron.php)
ⓐ ตรวจงานที่ตั้งเวลาไว้เมื่อมีผู้เข้าชม
ⓑ งานตามรอบของปลั๊กอิน(Rank Math, WP Rocket ฯลฯ)
ปัญหาด้านประสิทธิภาพของ WP-Cron
ขึ้นอยู่กับทราฟฟิก
เซิร์ฟเวอร์รับภาระเกินเพราะถูกเรียกมากเกินไป
การรันซ้ำและคอขวด
วิธีการทำงานของ WP-Cron
ตัวตั้งเวลาเสมือนที่อิงทราฟฟิก
ลำดับการทำงานของงานที่ตั้งเวลาไว้
ทำงานตามการเข้าชม ไม่ใช่ตามเวลา

ทุกครั้งที่หน้า WordPress โหลด ระบบจะตรวจอีเวนต์ที่ตั้งเวลาไว้ และเพราะปลั๊กอินมีงานตามรอบ จึงจำเป็นต้องใช้ WP-Cron ที่ไม่มีประสิทธิภาพนี้ให้มีประสิทธิภาพมากขึ้น

1️⃣ ทดสอบ WP-Cron

เมื่อตรวจงาน Cron ด้วย WP-CLI จะเห็น Cron ที่ทำงานอยู่กำลังรัน และเห็นว่าปลั๊กอินอย่าง Rank Math และ WP Rocket รันงานที่ตั้งเวลาไว้เป็นรายวันหรือทุก ๆ ไม่กี่นาที

WP CLI- ตรวจรายการอีเวนต์ Cron ที่ตั้งเวลาไว้ด้วยคำสั่ง wp-cron event list_

2️⃣ วิธีตั้งค่า WP-Cron

WP-Cron คือตัวตั้งเวลาเสมือนที่จัดการงานที่ตั้งเวลาไว้ของ WordPress โดย wp-cron.php จะทำงานเมื่อผู้ใช้เข้าชม แต่การทำงานที่อิงทราฟฟิกไม่เสถียร และการถูกเรียกมากเกินไปอาจทำให้เซิร์ฟเวอร์รับภาระหนัก จึงมักเสริมด้วย Cron ของระบบ
หากจำเป็น แนะนำให้ตั้งค่า DISABLE_WP_CRON ใน wp-config.php เพื่อปิด WP-Cron แล้วรันเป็นประจำด้วย Cron ของ Linux

รายการ

ปิด WP-Cron + รันด้วย Cron ของระบบอย่างเดียว

ตั้งค่า

ปิด WP-Cron แล้วรัน wp-cron.php จาก Cron ของระบบ

ข้อดี

ไม่มีการรันซ้ำ รันตามเวลาได้แม่นยำ และเซิร์ฟเวอร์รับภาระน้อย

ข้อเสีย

ฟีเจอร์ปลั๊กอินบางส่วนอาจหยุดทำงาน และถ้าตั้งค่าผิดอาจมีงานตกหล่น

แนะนำ · สถานการณ์

เหมาะกับเว็บไซต์ที่มีทราฟฟิกสูงและมีงานที่ตั้งเวลาไว้มาก

แต่วิธีที่ ① มีข้อเสียคือ ฟีเจอร์ PreLoad ของปลั๊กอินแคชอย่าง WP Rocket ที่สร้างแคชล่วงหน้าทุก 1 นาทีก่อนผู้เข้าชมจะเข้ามาที่หน้าเว็บ จะถูกปิดไปด้วย

⚙️ แก้ไขไฟล์ wp-config.php

ตั้งค่าได้ด้วยการปิด WP_CRON

# ปิด WP_CRON
define( 'DISABLE_WP_CRON', true );

ขณะที่ WP-Cron กำลังทำงาน WP_CRON_LOCK_TIMEOUT จะทำหน้าที่เป็น [ตัวล็อกตามเวลา] ที่กันการพยายามรันครั้งอื่น.

# 5 นาทีใส่ 300 รันทุก 60 นาทีใส่ 3600
define('WP_CRON_LOCK_TIMEOUT', 300);

ด้วยเหตุนี้ แทนที่จะปิดแค่ WP-Cron ในไฟล์ wp-config.php ขอแนะนำให้ปิดแล้วเพิ่มงาน System Cron ซึ่งเซิร์ฟเวอร์ที่ดูแลอยู่ตอนนี้ก็ตั้งค่าด้วยวิธีนี้

⚙️ เปิดใช้ Cron ของระบบบนเซิร์ฟเวอร์ Linux [พื้นฐาน]

เปิดใช้แยกตามโดเมนได้

# รันทุก 5 นาที
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# รันทุก 30 นาที
*/30 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# รันทุก 1 ชั่วโมง
0 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
# รันวันละ 1 ครั้ง
0 3 * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

4 บรรทัดด้านบนเป็นตัวอย่างตามรอบเวลาที่ลงทะเบียนใน crontab ทุกเวลาที่กำหนด curl จะเรียกที่อยู่ [wp-cron.php] ทำให้งานที่ตั้งเวลาไว้ทำงานได้แม้ไม่มีผู้เข้าชม

# กรณีเป็นเซิร์ฟเวอร์ภายในเครื่อง
*/5 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# รันทุก 30 นาที
*/30 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# รันทุก 1 ชั่วโมง
0 * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

# รันวันละ 1 ครั้ง
0 3 * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

ถ้าติดตั้ง WP-CLI ไว้ ตั้งเพียงบรรทัดเดียวตามรอบเวลาที่ต้องการได้ ▼

# รันทุก 5 นาที
*/5 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# รันทุก 30 นาที
*/30 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# รันทุก 1 ชั่วโมง
0 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

# รันวันละ 1 ครั้ง
0 3 * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

เป็นการตั้งค่าให้ WP-CLI ภายในเซิร์ฟเวอร์รันเฉพาะงานที่ตั้งเวลาไว้ซึ่งถึงกำหนดแล้วด้วยตัวเลือก [--due-now] ส่วน [flock -n] จะข้ามการรันครั้งใหม่ถ้าการรันก่อนหน้ายังไม่จบ

⚙️ WP-CLI กับ Cron ของระบบทุก 1 นาที และการกันงาน Cron ซ้ำ

WP_CRON แบบเดิมมีโครงสร้างที่ถ้างานมีมากจะข้ามไปเฉย ๆ แล้วค่อยรันใหม่ภายหลัง ให้ปิด WP-Cron แบบเดิมและตั้งให้งานที่ตั้งเวลาไว้คงการล็อกไว้ 5 นาที เพื่อกันไม่ให้ Cron ของระบบกับ WP-Cron รันซ้อนกัน

define('DISABLE_WP_CRON', true);         // ปิดการรันอัตโนมัติของ WP-Cron
define('WP_CRON_LOCK_TIMEOUT', 300);     // ไม่รอ → ข้าม; คงการล็อก 5 นาทีขณะรันงานที่ตั้งเวลาไว้

/* That's all, stop editing! Happy publishing. */

ตั้งตัวเลือก flock -n เพิ่มให้ Cron ของระบบ เพื่อให้ฝั่ง Cron ของระบบจบการทำงานทันที

# ตั้งค่า wp cron: flock -n → ไม่รอ → จบทันที
*/1 * * * * cd /sites/example.com/files/ && flock -n ~/.wp_cron.lock /usr/local/bin/wp cron event run --due-now --quiet

ผลของการตั้งค่าแบบผสมข้างต้นคือ

  • การรันอัตโนมัติภายใน WP ถูกปิด → งานที่ตั้งเวลาไว้รันได้โดยไม่ขึ้นกับจำนวนผู้เข้าชม
  • Cron ของระบบพยายามรันทุก 1 นาที → ถ้ามีงานที่ตั้งเวลาไว้ก็จะรัน
  • เมื่อถูกล็อกจะไม่รันซ้ำเป็นเวลา 5 นาที → กันการรันซ้ำ (ในทางปฏิบัติ เมื่อตั้ง flock -n แล้ว WP_CRON_LOCK_TIMEOUT ก็ไม่จำเป็นนัก)

เมื่อกันการรันซ้ำแล้ว ลำดับการทำงานจริงคือ

  1. 08:00 → Cron ของระบบเรียก wp-cron.php
    • งานที่ตั้งเวลาไว้ A ทำงาน → ตั้งล็อก 5 นาที
  2. 08:01 → Cron ของระบบเรียกอีกครั้ง
    • งาน A ยังถูกล็อก → ไม่รัน
  3. 08:02–08:04 → เหมือนเดิม
    • 08:05 → ปลดล็อก → ถ้ามีงานที่ตั้งเวลาไว้ถัดไปก็จะรัน

WordPress ไม่ได้รันงานเองโดยอัตโนมัติ แต่ระบบเป็นผู้รับผิดชอบการรันแทน และ WP_CRON_LOCK_TIMEOUT ทำหน้าที่เป็นตัวป้องกันเสริมที่กันการรันซ้ำ

รายการ

WP_CRON_LOCK_TIMEOUT

flock -n

รูปแบบการล็อก

ภายใน WordPress

ระดับระบบ

ตำแหน่งที่เก็บล็อก

อิง DB: doing_cron ใน wp_options

อิงไฟล์ในระบบ: ~/.wp_cron.lock

รอหรือไม่

❌ ไม่รอ → ข้าม

❌ ไม่รอ → จบทันที

กันการรันซ้ำ

✅ กันการรันซ้ำ

✅ กันการรันซ้ำ

เมื่อทำเสร็จแล้ว ตรวจสอบได้ด้วยคำสั่ง WP-CLI ว่า Cron ยังทำงานได้ดีเหมือนเดิมหรือไม่

wp cron event list
+-------------------------------------------+---------------------+-----------------------+---------------+
| hook                                      | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------------------------------+---------------------+-----------------------+---------------+
| rocket_saas_pending_jobs                  | 2026-10-17 12:00:57 | now                   | 1 minute      |
| action_scheduler_run_queue                | 2026-10-17 12:00:57 | now                   | 1 minute      |
| action_scheduler_run_queue_rucss          | 2026-10-17 12:00:58 | now                   | 1 minute      |
| rocket_saas_on_submit_jobs                | 2026-10-17 12:00:58 | now                   | 1 minute      |
| rocket_preload_process_pending            | 2026-10-17 12:00:59 | now                   | 1 minute      |
| rocket_purge_time_event                   | 2026-10-17 12:16:59 | 15 minutes 8 seconds  | 1 hour        |
| wp_privacy_delete_old_export_files        | 2026-10-17 12:28:46 | 26 minutes 55 seconds | 1 hour        |
| wp_update_user_counts                     | 2026-10-17 20:15:52 | 8 hours 14 minutes    | 12 hours      |
| rocket_preload_revert_old_failed_rows     | 2026-10-17 20:17:59 | 8 hours 16 minutes    | 12 hours      |
| wp_version_check                          | 2026-10-17 20:28:34 | 8 hours 26 minutes    | 12 hours      |
| wp_update_plugins                         | 2026-10-17 20:58:34 | 8 hours 56 minutes    | 12 hours      |
| wp_update_themes                          | 2026-10-17 21:28:34 | 9 hours 26 minutes    | 12 hours      |
| recovery_mode_clean_expired_keys          | 2026-10-18 07:28:46 | 19 hours 26 minutes   | 1 day         |
| wp_privacy_personal_data_cleanup_requests | 2026-10-18 07:28:46 | 19 hours 26 minutes   | 1 day         |
| wp_scheduled_delete                       | 2026-10-18 08:15:52 | 20 hours 14 minutes   | 1 day         |
| delete_expired_transients                 | 2026-10-18 08:15:52 | 20 hours 14 minutes   | 1 day         |
| wp_scheduled_auto_draft_delete            | 2026-10-18 08:15:54 | 20 hours 14 minutes   | 1 day         |
| wp_delete_temp_updater_backups            | 2026-10-18 08:16:17 | 20 hours 14 minutes   | 1 week        |
| rocket_update_dynamic_lists               | 2026-10-18 08:16:57 | 20 hours 15 minutes   | 1 week        |
| rocket_saas_clean_rows_time_event         | 2026-10-18 08:16:57 | 20 hours 15 minutes   | 1 week        |
| rocket_performance_hints_cleanup          | 2026-10-18 08:16:58 | 20 hours 15 minutes   | 1 day         |
| rocket_preload_clean_rows_time_event      | 2026-10-18 08:26:57 | 20 hours 25 minutes   | 1 week        |
| rocket_database_optimization_time_event   | 2026-10-18 09:34:25 | 21 hours 32 minutes   | 1 day         |
| wp_site_health_scheduled_check            | 2026-10-19 07:28:46 | 1 day 19 hours        | 1 week        |
| rocket_remove_saas_failed_jobs            | 2026-10-19 08:16:58 | 1 day 20 hours        | 3 days        |
+-------------------------------------------+---------------------+-----------------------+---------------+

ผลลัพธ์จะแสดงชื่อ hook ที่ลงทะเบียนไว้ เวลารันครั้งถัดไป และรอบการทำซ้ำ งานที่คอลัมน์ [next_run_relative] เป็น [now] จะถูกประมวลผลทันทีในการรัน Cron ครั้งถัดไป

Ⅲ. เมื่องานที่ตั้งเวลาไว้ของ WP-Cron ไม่ทำงาน

เราอาจคิดว่าเมื่อถึงเวลาที่ตั้งไว้ งานจะรันเอง แต่ WP-Cron ไม่ได้ดูเวลา มันจะตรวจงานที่ต้องทำเมื่อมีคำขอหน้าเว็บเข้ามา งานที่ตั้งเวลาไว้ตอนบ่าย 2 โมง ถ้าไม่มีคำขอเลยจนถึง 5 โมงเย็น ก็จะรันตอนคำขอแรกของเวลา 5 โมงเย็น

เมื่อการรันล่าช้า โพสต์ที่ตั้งเวลาเผยแพร่ไว้จะแสดงเป็น [ตารางเวลาผิดพลาด] (Missed schedule) ในรายการโพสต์ และใน [การปรับปรุงที่แนะนำ] ของแท็บสถานะที่ [เครื่องมือ › สุขภาพเว็บ] จะมี [งานที่ตั้งเวลาไว้ล้มเหลว] ขึ้นมา งานที่ปลั๊กอินลงทะเบียนไว้ เช่น การโหลดแคชล่วงหน้า ก็รอรันด้วยเหตุผลเดียวกัน

งานที่ตั้งเวลาไว้จะผ่านคำขอหน้าเว็บ การตรวจงานที่ต้องทำ และคำขอ loopback ก่อนจะรันใน [wp-cron.php] ถ้าขาดตอนใดตอนหนึ่ง งานจะไม่รันแม้เลยเวลาแล้ว

🧭 กว่างานที่ตั้งเวลาไว้จะได้รัน
แผนภาพอธิบาย
🔍 สถานการณ์
🌐
คำขอหน้าเว็บ
การเข้าชมที่ทำให้ WordPress ทำงาน
✕ ไม่ทำงาน
→
🔎
ตรวจงานที่ต้องทำ
มีงานที่เลยเวลาแล้วหรือไม่
✕ ไม่ตรวจ
→
🔁
คำขอ loopback
เซิร์ฟเวอร์ → [wp-cron.php] ที่ที่อยู่ของตัวเอง
✕ 403
→
⚙️
รันงาน
[wp-cron.php] ประมวลผลงานที่ตั้งเวลาไว้
✓ ทำงาน
เมื่อมีคำขอที่ทำให้ WordPress ทำงานเข้ามา ระบบจะตรวจงานที่เลยเวลาแล้ว และเซิร์ฟเวอร์จะเรียก [wp-cron.php] ที่ที่อยู่ของตัวเองเพื่อประมวลผลงาน
ถ้าไม่มีผู้เข้าชม หรือตอบกลับด้วยไฟล์แคชหน้าเว็บ WordPress จะไม่ทำงาน งานที่เลยเวลาแล้วจึงต้องรอจนกว่าจะมีคำขอถัดไป
ถ้า [DISABLE_WP_CRON] เป็น true ต่อให้มีคำขอเข้ามาก็จะไม่ตรวจงานที่ต้องทำ และถ้าไม่มี Cron ของระบบ ก็ไม่มีที่ไหนรันงาน
ถ้ามีกฎความปลอดภัยที่บล็อก [wp-cron.php] คำขอ loopback จะได้ 403 กลับมา และงานจะไม่ถูกรัน

1️⃣ เมื่อไม่มีผู้เข้าชมหรือแคชหน้าเว็บเป็นผู้ตอบกลับ

WP-Cron ตรวจงานที่ต้องทำเฉพาะในคำขอที่ทำให้ WordPress ทำงาน ช่วงที่ไม่มีผู้เข้าชม งานที่เลยเวลาแล้วจึงกองค้างอยู่อย่างนั้น ต่อให้มีผู้เข้าชม ถ้าตอบกลับด้วยไฟล์แคชหน้าเว็บ WordPress ก็ไม่ทำงาน ผลจึงเหมือนกัน

ใน WordPress ที่เปิดแคชหน้าเว็บของ WP Rocket ไว้ เมื่อเปิดหน้าแรกที่ถูกแคชแล้ว ไม่มีการเรียก [wp-cron.php] ถูกบันทึกไว้ แต่พอเปิดที่อยู่ที่ไม่ถูกแคช การเรียกก็ถูกบันทึกในวินาทีเดียวกัน และงานที่ค้างอยู่ 5 งานก็ได้รัน

ดูงานที่ค้างอยู่ได้โดยกรองรายการของ WP-CLI ให้เหลือเฉพาะบรรทัดที่ [next_run_relative] เป็น [now]

wp cron event list --next_run_relative=now --fields=hook,next_run_gmt,next_run_relative
+----------------------------------+---------------------+-------------------+
| hook                             | next_run_gmt        | next_run_relative |
+----------------------------------+---------------------+-------------------+
| rocket_saas_pending_jobs         | 2026-10-17 14:49:57 | now               |
| action_scheduler_run_queue       | 2026-10-17 14:49:57 | now               |
| action_scheduler_run_queue_rucss | 2026-10-17 14:49:58 | now               |
| rocket_saas_on_submit_jobs       | 2026-10-17 14:49:58 | now               |
| rocket_preload_process_pending   | 2026-10-17 14:49:59 | now               |
+----------------------------------+---------------------+-------------------+

[now] คืองานที่เลยเวลาที่กำหนดไปแล้ว และคำสั่งแสดงรายการนี้ก็โหลด WordPress ด้วย ถ้ามีงานค้างอยู่ ทันทีที่คำสั่งจบก็จะเรียก [wp-cron.php] ถ้ารันคำสั่งเดิมซ้ำทันที งานที่เพิ่งเห็นจะหายไปจากรายการแล้ว

ถ้าต้องการเคลียร์งานที่ค้างก่อนแก้ต้นเหตุ ให้ใช้ WP-CLI รันเฉพาะงานที่เลยกำหนดแล้วทันที

wp cron event run --due-now
Executed the cron event 'rocket_saas_pending_jobs' in 0.005s.
Executed the cron event 'action_scheduler_run_queue' in 0.006s.
Executed the cron event 'action_scheduler_run_queue_rucss' in 0.006s.
Executed the cron event 'rocket_saas_on_submit_jobs' in 0.005s.
Executed the cron event 'rocket_preload_process_pending' in 0.007s.
Success: Executed a total of 5 cron events.

คำสั่งนี้รันงานภายในเซิร์ฟเวอร์โดยไม่ต้องมีคำขอ HTTP ถ้าต้องการให้ประมวลผลตามรอบที่กำหนดโดยไม่ขึ้นกับการเข้าชม ให้ลงทะเบียนคำสั่งเดียวกันไว้ใน Cron ของระบบ

2️⃣ เมื่อเปิดแค่ DISABLE_WP_CRON แต่ไม่มี Cron ของระบบ

ถ้าตั้ง [DISABLE_WP_CRON] เป็น true ต่อให้มีคำขอหน้าเว็บเข้ามา WP-Cron ก็จะไม่ตรวจงานที่ต้องทำ เอกสารทางการก็แนะนำให้ลงทะเบียนกับตัวตั้งเวลางานของระบบก่อน แล้วจึงใส่ค่าคงที่นี้ ถ้าใส่แค่ค่าคงที่โดยไม่ลงทะเบียน ก็จะไม่มีที่ไหนรันงานที่ตั้งเวลาไว้

เมื่อใส่ค่าคงที่ไว้ โพสต์ที่ตั้งเวลาไว้อีกราว 1 นาทีข้างหน้ายังคงเป็น [ตั้งเวลาไว้] แม้เลยเวลาแล้ว และช่องวันที่ในรายการโพสต์แสดง [ตารางเวลาผิดพลาด] ระหว่างนั้นไม่มีการเรียก [wp-cron.php] ถูกบันทึกเลยสักครั้ง

ตรวจได้ว่าค่าคงที่นี้เปิดอยู่หรือไม่ด้วย [wp cron test]

wp cron test
Error: The DISABLE_WP_CRON constant is set to true. WP-Cron spawning is disabled.

ถ้าเจอข้อผิดพลาดนี้ ให้ตรวจว่าใน Cron ของระบบมีบรรทัดที่เรียก [wp-cron.php] หรือรัน [wp cron event run] หรือไม่ ถ้า crontab ของบัญชีเว็บไซต์ว่างอยู่ จะแสดงตามด้านล่าง

crontab -l
no crontab for example

ถ้าไม่มีบรรทัดนั้น ให้ลงทะเบียน Cron ของระบบ แต่ถ้าสภาพแวดล้อมลงทะเบียนไม่ได้ ให้ลบบรรทัด [DISABLE_WP_CRON] แล้วกลับไปใช้ WP-Cron

3️⃣ เมื่อคำขอ loopback ของเซิร์ฟเวอร์ถูกบล็อก

เมื่อมีงานต้องทำ WP-Cron จะให้เซิร์ฟเวอร์ส่งคำขอไปยัง [wp-cron.php] ที่ที่อยู่เว็บไซต์ของตัวเองเพื่อรันงาน คำขอนี้คือคำขอ loopback ถ้ามีกฎความปลอดภัยที่บล็อก [wp-cron.php] คำขอ loopback จะได้ 403 กลับมา และงานจะไม่ถูกรัน

บนเซิร์ฟเวอร์ที่ใช้ Nginx กับ Apache เมื่อจำกัดให้ [wp-cron.php] เปิดได้จาก 127.0.0.1 เท่านั้น คำขอ loopback ก็ถูกบล็อกด้วย 403 เพราะคำขอที่เซิร์ฟเวอร์ส่งไปยังโดเมนของตัวเองจะเข้ามาทาง IP สาธารณะ และ [wp cron test] ก็คืนรหัสสถานะเดียวกัน

wp cron test
Error: WP-Cron spawn returned HTTP status code: 403 Forbidden

เมื่องานค้างเกิน 5 นาทีแล้วเปิดหน้า [สุขภาพเว็บ] ใน [การปรับปรุงที่แนะนำ] จะแสดงทั้งคำเตือน loopback และงานที่ตั้งเวลาไว้ล้มเหลวพร้อมกัน

หน้าจอแท็บสถานะของสุขภาพเว็บที่แสดงงานที่ตั้งเวลาไว้ล้มเหลวและคำเตือนคำขอ loopback หลังคำขอ loopback ของ WP-Cron ถูกบล็อกด้วย 403

พอลบกฎออก [wp cron test] ก็กลับมาสำเร็จอีกครั้ง ถ้าต้องคงกฎไว้ ให้รันด้วย WP-CLI จาก Cron ของระบบ การรันด้วย WP-CLI ไม่ผ่านคำขอ HTTP งานที่ค้างจึงถูกประมวลผลได้แม้กฎเดิมยังอยู่

🔢 FAQ & เนื้อหาแนะนำ

งานตรวจอัปเดต [wp_version_check], [wp_update_plugins], [wp_update_themes] บนเว็บไซต์ทดสอบมีรอบทุก 12 ชั่วโมง การล้างถังขยะ ([wp_scheduled_delete]) และการลบ transient ที่หมดอายุลงทะเบียนเป็นรายวัน ส่วนการตรวจสุขภาพเว็บเป็นรายสัปดาห์ การล้างถังขยะคืองานที่ลบโพสต์และความเห็นที่อยู่ในถังขยะเกิน 30 วัน (ค่าเริ่มต้น) อย่างถาวร ถ้า WP-Cron ไม่ทำงาน งานเหล่านี้ก็จะไม่รันตามเวลาที่กำหนด

เป็น hook ที่ Action Scheduler ไลบรารีคิวงานที่มาพร้อมปลั๊กอิน ใช้ประมวลผลงานที่รออยู่ บนเว็บไซต์ทดสอบลงทะเบียนไว้ทุก 1 นาที FAQ ทางการของ Action Scheduler ระบุว่าคิวนี้โดยค่าเริ่มต้นจะเริ่มจาก WP-Cron และตอนท้ายของคำขอหน้าผู้ดูแล (hook [shutdown]) บนเว็บไซต์ทดสอบที่เปิดแค่ [DISABLE_WP_CRON] โดยไม่มี Cron ของระบบ บรรทัดนี้ก็ค้างเป็น [now] พร้อมกับโพสต์ที่ตั้งเวลาเผยแพร่

ตามเอกสารทางการ มีวิธีทางเลือกคือกำหนดค่าคงที่ [ALTERNATE_WP_CRON] เป็น true ใน [wp-config.php] เมื่อมีงานที่ต้องรัน คำขอ GET ของผู้เข้าชมจะถูกเปลี่ยนเส้นทางไปยังที่อยู่เดิมที่ต่อท้ายด้วยค่า [doing_wp_cron] ตอนนั้น [wp-cron.php] จะรันภายในคำขอเดิมโดยไม่ผ่านคำขอ loopback เอกสารเดียวกันระบุว่าวิธีนี้ไม่ใช่การทำงานมาตรฐานของ WordPress จึงมีความเสี่ยง ถ้าลงทะเบียน Cron ของระบบได้ ให้ใช้ Cron ของระบบก่อน

🧭 เนื้อหางานที่ตั้งเวลาไว้ของ WordPress แนะนำ 7 บทความ · 4 อ้างอิง
🗂️ งานที่ตั้งเวลาไว้ของ WordPress
📄 WP-Cron(wp-cron.php) 📄 การตั้งค่าพื้นฐาน wp-config.php 📄 สุขภาพเว็บไซต์ WordPress
📋 ตั้งค่า crontab 📄 คำสั่ง nice ของ Linux
📋 WP CLI: ติดตั้งและตั้งค่า 📄 ค้นหาแพตเทิร์นที่ซิงค์: WP-CLI
📡 About Cron 📡 อีเวนต์ WP Cron 📡 ทำความเข้าใจการตั้งเวลา Cron 📡 เชื่อม WP-Cron กับตัวตั้งเวลางานของระบบ
ไม่พบผลการค้นหา
วิธีการทำงานและโครงสร้างของ WP-Cron
WordPress · WP-Cron
WP-Cron (wp-cron.php): ปิดการทำงานและตั้งค่า Cron ของระบบ | ปรับแต่งประสิทธิภาพ WordPress
ใน WordPress งาน Cron คือฟีเจอร์ที่รันงานซึ่งตั้งเวลาไว้ตามเวลาหรือวันที่ที่กำหนดโดยอัตโนมัติ
อ่านบทความ →เนื้อหาปัจจุบัน
ไฟล์ wp-config.php ของ WordPress
WordPress · wp-config.php
การตั้งค่าพื้นฐาน wp-config.php: ไฟล์ & หน่วยความจำ·รีวิชัน คู่มือตั้งค่าผ่าน SSH, SFTP, cPanel
ไฟล์ wp-config.php คือไฟล์ตั้งค่าที่สำคัญที่สุดของเว็บไซต์ WordPress
อ่านบทความ →เนื้อหาปัจจุบัน
หน้าจอสถานะสุขภาพเว็บไซต์ WordPress
WordPress · สุขภาพเว็บไซต์
สุขภาพเว็บไซต์ WordPress: ตรวจสอบสถานะเว็บไซต์ | วิธีอ่านปัญหาร้ายแรงและการปรับปรุงที่แนะนำ
สุขภาพเว็บไซต์ WordPress คือฟีเจอร์ในเมนูเครื่องมือของหน้าผู้ดูแลระบบ ที่ตรวจรายการอย่างเวอร์ชัน PHP, HTTPS และสถานะการอัปเดตโดยอัตโนมัติ
อ่านบทความ →เนื้อหาปัจจุบัน
Cron ไทล์อ้างอิง Plugin Handbook ของ WordPress (ลิงก์ภายนอก)
ลิงก์ภายนอก · เอกสารทางการของ WordPress
Cron
หัวข้อ Cron ใน Plugin Handbook ของ WordPress อธิบายวิธีการทำงานของ WP-Cron ที่ตรวจรายการงานที่ตั้งเวลาไว้ทุกครั้งที่มีคำขอหน้าเว็บ
อ่านบทความ →เนื้อหาปัจจุบัน
Scheduling WP Cron Events ไทล์อ้างอิง Plugin Handbook ของ WordPress (ลิงก์ภายนอก)
ลิงก์ภายนอก · เอกสารทางการของ WordPress
Scheduling WP Cron Events
อธิบายขั้นตอนเพิ่ม hook สำหรับงานที่ตั้งเวลาไว้แล้วลงทะเบียนด้วย [wp_schedule_event] และวิธียกเลิกการตั้งเวลาเมื่อปิดใช้งานปลั๊กอิน
อ่านบทความ →เนื้อหาปัจจุบัน
Understanding WP-Cron Scheduling ไทล์อ้างอิง Plugin Handbook ของ WordPress (ลิงก์ภายนอก)
ลิงก์ภายนอก · เอกสารทางการของ WordPress
Understanding WP-Cron Scheduling
อธิบายวิธีที่ WP-Cron ทำงานซ้ำตามเวลารันครั้งแรกและช่วงห่างเป็นวินาทีแทนเวลาที่ตายตัว รวมถึงช่วงห่างเริ่มต้น 4 แบบ
อ่านบทความ →เนื้อหาปัจจุบัน
Hooking WP-Cron Into the System Task Scheduler ไทล์อ้างอิง Plugin Handbook ของ WordPress (ลิงก์ภายนอก)
ลิงก์ภายนอก · เอกสารทางการของ WordPress
Hooking WP-Cron Into the System Task Scheduler
อธิบายลำดับการลงทะเบียนการเรียก [wp-cron.php] ใน Task Scheduler ของ Windows และ cron ของ Linux แล้วปิด WP-Cron ด้วย [DISABLE_WP_CRON]
อ่านบทความ →เนื้อหาปัจจุบัน

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 5   +   5   =