ฉันควรปิดการใช้งาน WP_CRON และจะทริกเกอร์ wp-cron.php จากเซิร์ฟเวอร์ทุก ๆ สองสามนาทีหรือไม่


12

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

มีข้อเสียอะไรหรือไม่?

คำตอบ:


15

ไม่มีข้อเสียสำหรับการรัน WP CRON โดยใช้งาน cron ของเซิร์ฟเวอร์ ในความเป็นจริงนี่คือแนวทางปฏิบัติที่แนะนำ

ตามที่อย่างเป็นทางการ WordPress เอกสารการพัฒนาปลั๊กอิน :

WP-Cron ไม่ทำงานอย่างต่อเนื่องซึ่งอาจเป็นปัญหาหากมีงานสำคัญที่ต้องทำงานให้ตรงเวลา มีทางออกที่ง่ายสำหรับสิ่งนี้ เพียงตั้งค่าตัวกำหนดตารางงานของระบบให้ทำงานตามช่วงเวลาที่คุณต้องการ (หรือตามเวลาที่กำหนด)

หากต้องการทำสิ่งนี้คุณต้องปิดใช้งานพฤติกรรม cron เริ่มต้นในwp-config.php:

define('DISABLE_WP_CRON', true);

จากนั้นกำหนดเวลาwp-cron.phpจากเซิร์ฟเวอร์ของคุณ สำหรับ Linux นั่นหมายถึง:

crontab -e

อย่างไรก็ตามแทนที่จะรันใน Command Line (CLI) ให้รันเป็นคำร้องขอ HTTP เพื่อที่คุณอาจใช้wget:

*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron

WordPress โหลดไฟล์หลักที่จำเป็นทั้งหมดปลั๊กอิน ฯลฯwp-cron.phpด้วยรหัสต่อไปนี้:

if ( !defined('ABSPATH') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

ดังนั้นไม่ต้องกังวลกับ WordPress ที่ไม่โหลดคุณสมบัติที่สำคัญ


1
WordPress.org เอกสารที่คุณเชื่อมโยงกับการกล่าวถึงwget http://YOUR_SITE_URL/wp-cron.phpโดยไม่เพิ่ม?doing_wp_cron ดังนั้นจะดีกว่าอีกไหม การเพิ่มนอกเหนือจากการ?doing_wp_cronทำสิ่งที่ไม่ใช่รุ่นไม่?
Garconis

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

1
ฉันไม่เห็นด้วยกับเรื่องนี้เลย ก่อนอื่นมันไม่จริงเลยที่จะ "แนะนำ" ประการที่สองวิธีนี้จะทำลายปลั๊กอินใด ๆ ที่ใช้วิธีการที่แนะนำจริงของการกำหนดตารางเวลาเหตุการณ์ ฉันคิดว่านี่เป็นคำแนะนำที่ไม่ดีจริงๆ เกือบจะไม่มีใครควรปิด cron เว้นแต่คุณจะมีเหตุผลที่เฉพาะเจาะจงมากในการทำเช่นนั้น เหตุผลเดียวที่ฉันคิดได้ก็คือถ้าคุณกำลังแบ่ง WordPress สำหรับ CDN หรืออะไรบางอย่าง นี่ไม่ใช่การปฏิบัติตามปกติ
John Dee

1
@JohnDee: วิธีนี้ไม่ได้ปิดใช้งาน cron จริงๆมันปิดการใช้งานวิธี WP Cron ที่ตรวจสอบและพยายามที่จะเรียกใช้งาน cron ในการโหลดแต่ละหน้า define('DISABLE_WP_CRON', true);ปิดใช้งานเฉพาะส่วนนั้นของกระบวนการ cron และจากนั้นเรียกสคริปต์ cron ด้วยรหัสเช่น: */5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cronบนเซิร์ฟเวอร์ทำให้แน่ใจว่ามีการดำเนินงาน cron ปลั๊กอินการตั้งเวลาใด ๆ จะไม่ทราบความแตกต่าง
Fayaz

1
ลิงก์เอกสารของ WordPress.org เกี่ยวกับเรื่องนี้เปลี่ยนเป็นdeveloper.wordpress.org/plugins/cron/…
aldemarcalazans

2

มีข้อเสียอยู่สองสามประการ: ประการแรกเมื่อใช้ wp-cron.php เป็นสิ่ง cli เช่นตัวแปร $ _SERVER ไม่ได้ตั้งค่า ผู้คนเอาชนะข้อ จำกัด นี้ได้โดยใช้คำสั่ง curl เพื่อ wp-cron.php แทน

ประการที่สองเนื่องจาก WP เองไม่ได้โหลดด้วย wp-cron.php ถ้าคุณใช้ปลั๊กอินส่งจดหมาย SMTP แล้วสิ่งนี้จะไม่โหลดเมื่อเรียก wp-cron อีกครั้งโดยใช้การโทรขดแทนที่ปัญหานี้ Curl น่าจะเป็นวิธีที่ใช้บ่อยที่สุด

อย่างไรก็ตาม; ฉันชอบใช้ wp-cli หลังจากตั้งค่าเมลใน postfix และ (สำหรับ nginx) php-fpm config อย่างถูกต้องและตั้ง crontab เช่น

*/5    *   *   *   *  wp cron event list --skip-plugins --skip-themes --path="/var/www/vhosts/example.com/httpdocs/wp" --fields=hook,next_run_relative --format=csv | awk -F, '$2=="now" {print $1}' | xargs -r wp --path="/var/www/vhosts/example.com/httpdocs/wp" cron event run $1

(แสดง crons ทั้งหมดที่มีฟิลด์เฉพาะในรูปแบบ csv - hook เป็นชื่อของ cron, การเรียกใช้ครั้งต่อไปคือเวลาถอดสิ่งที่แสดง 'now' เป็นการเรียกใช้ครั้งถัดไป (อันเนื่องมาจากตอนนี้) โดยใช้ AWK ผ่านรายการนั้น โทรหาwp cron event run $HOOKcron แต่ละอัน) การใช้ wp-cli โหลด WordPress อย่างถูกต้อง (ฉันเลือกที่จะข้ามปลั๊กอินเมื่อแสดงรายการ crons เนื่องจากรหัส erros และคำเตือนของ php จะทำให้สคริปท์ของสคริปต์หมดไป แต่อย่าข้ามเมื่อใช้ cron ด้วย xargs cron อาจต้องการปลั๊กอินที่กำลังโหลด)

หวังว่านี่จะช่วยให้คุณรู้ว่าควรระวังตัวอย่างไร


2
วิธีการเกี่ยวกับการตั้งค่า: / 15 * * * * * * * * * * * * wget -q -O - yourdomain.com/wp-cron.php?doing_wp_cronแนะนำโดย TomMcFarlin - tommcfarlin.com/wordpress-cron-jobs ดูเหมือนว่าจะทำงานได้ดี จะขอบคุณความคิดเห็นของคุณ
TheBigK

ใช่อย่างที่ฉันพูดไปทั่วคนเลือกที่จะใช้ curl (wget หรือการเรียก http อื่น ๆ ) เพื่อกระตุ้น crons และไม่มีอะไรผิดปกติกับวิธีการนั้น ฉันเพิ่งจะปรึกษาปัญหาของการเรียกไฟล์ wp-cron php โดยตรงซึ่งจะไม่รวมไฟล์ที่จำเป็นและให้คำแนะนำวิธีการทางเลือกอื่นหากคุณต้องการเครื่องเทศเพิ่มขึ้นเล็กน้อย
TechnicalChaos

0

มีเหตุผลหลายประการที่จะไม่ปิดใช้งาน wp-cron ในความเป็นจริงมันเป็นไปไม่ได้เกือบที่จะหากรณีการใช้งานเพื่อทำสิ่งนี้ มันไม่ทำให้เว็บไซต์ของคุณช้าลงและใช้สำหรับสิ่งที่คุณอาจไม่ทราบ

ปลั๊กอินจำนวนมากใช้ WP-Cron เพื่อกำหนดเวลาสิ่งต่าง ๆ พวกเขาอาจสับสนหากคุณปิดตัวกำหนดตารางเวลา

มีบทเรียนมากมายในหัวข้อนี้เนื่องจากมีความสับสนและเนื่องจากเว็บไซต์ของคุณไม่ได้ทำอะไรมากมายเมื่อคุณปิดการใช้งาน สิ่งที่จะทำคือทำให้ปวดหัวกับผู้ที่ต้องแก้ไขปัญหาลึกลับที่สร้างขึ้นในหกเดือน

นอกจากนี้ WP Heartbeat จะยิงทุก ๆ 15 วินาทีในพื้นที่ admin เพื่อแก้ไขปัญหานี้ให้ 99% ของผู้ที่คิดว่ามี


2
นี่เป็นการตอบสนองที่แย่มาก - พวกเขา - ไม่ - ปิดการใช้งาน WP Cron พวกเขาเพียงปิดการใช้งานการร้องขอของ WP Cron ใน pageload และถ่ายมันลงใน cron daemon ของระบบแทน Sheesh
Barry Chapman

อย่างไรก็ตามเหตุผลหลักที่ต้องปล่อยไว้เพียงอย่างเดียวก็คือตอนนี้ปลั๊กอินจำนวนมากกำลังใช้ cron สำหรับการทำงานพื้นหลังแบบขยาย คุณสามารถทำสิ่งที่คน NEXT ทำเพราะพวกเขาคาดหวังว่าระบบจะทำงานในแบบมาตรฐาน โชคดี!
John Dee

หากปลั๊กอินถูกเข้ารหัสในลักษณะที่แตกหักโดยสิ้นเชิงหากปิดใช้งาน cron wp หมายความว่าปลั๊กอินนั้นถูกโปรแกรมโดยไร้ความสามารถและจะเป็นการดีกว่าที่จะถอนการติดตั้งทันที
Magnetic_dud

ทั้งสองความคิดเห็นที่นี่พิสูจน์จุดของฉัน คุณมีหนึ่ง dev พูดว่า "สิ่งนี้ไม่ได้ปิดการใช้งาน cron มันจะทำให้มันสับไปยังระบบปฏิบัติการ cron" - ซึ่งเป็นตัวแบ่งใน WordPress ซึ่งเป็นระบบปฏิบัติการที่เป็นกลาง จากนั้น dev อีกคนพูดว่า "เฮ้มันเป็นความรับผิดชอบของปลั๊กอิน dev ที่จะวางแผนสำหรับการทำลายล้าง wp cron" เอ่อตกลง ดังนั้นหากคุณต้องการฟังก์ชั่น cron คุณควรวางแผนสำหรับการกำจัดระบบ cron หรือไม่ คืออะไร? ระบบ cron สำรอง? ความคิดเห็นนั้นไม่สมเหตุสมผล [ชัด]
John Dee

อย่างไรก็ตามสถานะปัจจุบันคือ "ความสับสนทั้งหมด" นั่นคือสถานะปัจจุบัน ทางออกเดียวจากมุมมองที่แปลกใหม่คือการบอกผู้คนว่านั่นคือเหตุผลของระบบ WP-CRON ไม่ต้องปิด ตัวเลือกอื่นคือ 10,000 ความคิดเห็นที่แตกต่างหลากหลาย สิ่งที่เรามีอยู่ตอนนี้
John Dee

0

ฉันยังไม่พบข้อเสียที่แท้จริงในการถ่ายโอน wp-cron ไปยังบริการภายนอก ทำสิ่งนี้มาหลายปีแล้ว

โดยเฉพาะอย่างยิ่งในโลกปัจจุบันที่คุณสามารถเรียกใช้แอปพลิเคชั่นเป็นไมโครไซต์

ฉันใช้คอนเทนเนอร์ Docker แยกต่างหากสำหรับแต่ละองค์ประกอบของ WordPress - php, เว็บ, db, crontab, redis และอื่น ๆ ) มี crontab เป็นคอนเทนเนอร์แยกต่างหากเรียก wp-cron ผ่าน http โดยใช้เครือข่ายท้องถิ่นทำงานเฉพาะเมื่อฉันต้องการเท่านั้น

สิ่งนี้จะช่วยลดความเครียดบนโหนดแบ็กเอนด์และปรับปรุงความปลอดภัยโดยมีพื้นผิวการโจมตีที่เล็ก

หากนักพัฒนาไม่สามารถหาวิธีการทำสิ่งต่าง ๆ โดยไม่ต้องเรียก wp-cron ในทุก ๆ หน้าโหลด heck สิ่งนี้จะพูดถึงความไม่มีประสบการณ์ในนามของเขา "ปล่อยให้อยู่คนเดียว" เพราะคุณไม่เข้าใจว่าสิ่งต่าง ๆ ทำงานอย่างไรไม่ใช่เหตุผลที่ดีที่จะเก็บมันไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.