ลบงาน cron นับพัน


16

ฉันค้นพบว่าฉันมีงาน 29,000 cron ในฐานข้อมูล WordPress ของฉันจากปลั๊กอินที่ถูกปิดการใช้งานและถูกลบ ฉันได้ลองใช้ปลั๊กอินออพติไมเซอร์จำนวนมาก แต่งาน cron จำนวนมากหมายความว่าฉันไม่สามารถลบออกโดยใช้ปลั๊กอินได้

ฉันยังลองใช้ฟังก์ชั่นของฉันด้วย PHP ไม่ประสบความสำเร็จ:

add_action("init", "clear_crons_left");
function clear_crons_left() {
    wp_clear_scheduled_hook("cron_name");
}

มีคำสั่ง SQL ที่ฉันสามารถใช้ใน phpmyadmin เพื่อค้นหาโดย cron hook และลบออก?


ฉันพบการลบ WP จำนวนมากใช้กับ carefull และใส่รายการได้สูงสุดรายการในการลบในครั้งเดียว
Zwelly

คำตอบ:


18

ขอบคุณ Privateer สำหรับการตอบกลับและคำแนะนำที่รวดเร็ว

ฉันพบวิธีรอบก่อนที่จะเห็นคำตอบของคุณ นี่เป็นวิธีการทีละขั้นตอนสำหรับการลบงาน cron เก่าหลายพันงานและอาจใช้กับคนอื่น

ฉันเข้าสู่ phpMyAdmin ฉันคลิกที่ฐานข้อมูลของฉันแล้วคลิกแท็บ 'ค้นหา' ฉันพิมพ์ 'cron' จากนั้นเลือก 'all tables' และคลิก 'Go' ฉันเลื่อนรายการผลลัพธ์การค้นหาไปที่ตาราง wp_options ของฉัน ฉันคลิก 'เรียกดู' ที่ด้านบนของรายการคือ option_name 'cron' ฉันคลิก 'แก้ไข' จากนั้นรอให้หน้าโหลด ฉันคลิกที่กล่องที่แสดงรายการของงาน cron รายชื่อ cron นั้นใช้เวลานานมากในการตอบสนองเคอร์เซอร์ของฉันประมาณ 80 วินาที ฉันใช้ Ctrl-A บนแป้นพิมพ์เพื่อเลือกทั้งหมดก่อนกดปุ่มลบ ใช้เวลาประมาณ 2 นาทีก่อนที่เบราว์เซอร์ของฉันจะทำการลบเสร็จสิ้น (หมดเวลาของ Chrome ดังนั้นฉันจึงลองใช้ Firefox ซึ่งใช้งานได้)

หลังจากผ่านไปสองสามนาทีงาน cron สำหรับปลั๊กอินที่ใช้งานอยู่ในปัจจุบันของฉันจะเติมข้อมูลรายการอีกครั้ง มีงาน 9 cron (ลดลงจากกว่า 29,000!) งาน cron ซ้ำหกปีจากปลั๊กอินที่เขียนโค้ดไม่ดีบางงานที่ฉันเพิ่งติดตั้งไปหนึ่งวันเพื่อทดลองใช้ นอกจากนี้ยังมีปลั๊กอินทั่วไปอีกหลายร้อยรายการเช่น Wordfence, BackupBuddy, Nextgen Gallery และ AutoOptimizer ทั้งหมดที่ฉันได้ถอนการติดตั้งในอดีต ตอนนี้เว็บไซต์ของฉันโหลดเหมือนถูกเรียกเก็บเงินจากเทอร์โบ พื้นที่ผู้ดูแลนั้นเร็วกว่ามาก ข้อผิดพลาดการหมดเวลาของผู้ดูแลระบบหายไป ฉันใช้เวลากับการปรับแต่งเว็บไซต์ของฉันเพื่อลดเวลาในการโหลด ฉันยังย้ายโฮสต์และอัปเกรดแผนการโฮสต์ของฉัน ไม่มีอะไรเพิ่มความเร็วของเว็บไซต์ของฉันเช่นการลบงาน cron ที่ล้าสมัยทั้งหมด เวลาในการดาวน์โหลดผ่านมือถือลดลงจาก 20 วินาทีเป็น 6 วินาที

ในการค้นหาโซลูชันฉันพบข้อมูลน้อยมากเกี่ยวกับผลกระทบของงาน cron ต่อประสิทธิภาพของเว็บไซต์ หลายคนบอกว่ามันสร้างความแตกต่างได้เล็กน้อยและสำหรับงาน cron จำนวนเล็กน้อยที่เป็นจริง แต่ปีเข้ามาในชีวิตของเว็บไซต์ WordPress ฉันสงสัยว่ามีกี่คนที่มีหลายร้อยคนหากไม่ใช่งาน cron เก่าจากปลั๊กอินที่ถูกลบ แทนที่จะขอให้ผู้ใช้ตรวจสอบขีด จำกัด หน่วยความจำ php ของพวกเขาฉันขอแนะนำให้นักพัฒนาคนแรกขอให้ผู้ใช้ตรวจสอบจำนวนงาน cron ใน wp_options เมื่อการแก้ไขปัญหาข้อผิดพลาดหน่วยความจำร้ายแรง คุณอาจประหลาดใจ / ตกใจกับสิ่งที่คุณพบ! :-)


1
ฉันพบปัญหาเดียวกัน ตอนนี้ฉันไม่ได้งาน cron เท่าไหร่ แต่มีประมาณ 15 Mb ในฐานข้อมูล หลังจากเวลาโหลดพื้นที่ผู้ดูแลระบบถูกลบลดลงจาก 5-7 เป็น 0.3 วินาที ความเร็วในการโหลดส่วนหน้าลดลงจาก 2 เป็น 0.4 วินาที
Alexey

1
บ้ามัน! วิธีนี้ช่วยเราได้! มีงาน 35000 cron ในตารางนี้ ตอนนี้ดูเหมือนว่าองคาพยพตามที่อธิบายไว้
Riccardo

ดีมากที่จะรู้แน่นอนตั้งแต่ฉันคิดว่าจะติดตั้งหนึ่งในปลั๊กอินที่กล่าวถึงสำหรับลูกค้า ดังนั้นตอนนี้ฉันรู้ว่าต้องระวังเมื่อประสิทธิภาพลดลงอย่างช้าๆ
lowtechsun

10

ลอง

SELECT * FROM `wp_options` WHERE option_name = 'cron'

หากคุณพบว่าคุณอาจลอง:

  • ใน SQL: UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
  • ใน wordpress: update_option('cron', '');

คุณอาจจำเป็นต้องลบตัวเลือก cron หรือตั้งค่าเป็นอาเรย์ต่อเนื่องที่ว่างเปล่า

การใช้ update_option จะปลอดภัยกว่าเพราะฉันไม่แน่ใจว่าค่าควรเป็นอาเรย์ที่ว่างเปล่าต่อเนื่องหรือสตริงที่ว่างเปล่า คุณสามารถเช็คอิน wp-include / options.php ได้ แต่ ... แต่การใช้ update_option จะจัดการได้อย่างถูกต้องโดยไม่ต้องกังวลเกี่ยวกับฐานข้อมูล


7

เหตุการณ์ Wordpress cron ยังสามารถล้างออกจากบรรทัดคำสั่งโดยใช้WP-CLI :

wp cron event list
wp cron event delete your_example_event

รายละเอียดเพิ่มเติมในเอกสาร WP-CLI


3
หรือลบกิจกรรมทั้งหมดwp option delete cron
Samuel Elh

1
wp option delete cronทำงานเมื่อมีงาน cron นับพันที่ยัดไว้ในตัวเลือก งานที่ไม่ดีเหล่านี้ส่วนใหญ่มาจากปลั๊กอินที่ไม่ดีทำในทางที่ผิด
Swashata Ghosh

6

วิธีที่ง่ายกว่าคือการโทรdelete_option( 'cron' );หนึ่งครั้งในปลั๊กอินบางตัว งาน cron ที่เพิ่มโดยอัตโนมัติทั้งหมดจะถูกเพิ่มอีกครั้งในการเยี่ยมชม / ร้องขอไซต์ของคุณครั้งต่อไป

ในฐานะที่เป็นปลั๊กอิน (mu) กรณีเดียวที่ทำงานเฉพาะเมื่อใดก็ตามที่คุณเปิดใช้งาน:

<?php
/** Plugin Name: Clean Cron */
register_activation_hook( __FILE__, function()
{
    delete_option( 'cron' );
} );

ขอบคุณไกเซอร์! สำหรับผู้ที่ไม่สะดวกในการสร้าง / แก้ไขปลั๊กอิน (เป็นเรื่องง่าย!) คุณสามารถใช้สิ่งที่ไกเซอร์ระบุไว้ในไฟล์ functions.php ของคุณ เพียงเพิ่มบันทึกบันทึกโหลดเว็บไซต์ของคุณแล้วลบออกและบันทึกอีกครั้ง
Privateer

สิ่งที่เกี่ยวกับงาน cron ที่ถูกสร้างขึ้นเมื่อเปิดใช้งานปลั๊กอิน? งาน cron เหล่านี้จะไม่ถูกสร้างขึ้นใหม่จนกว่าคุณจะลบและเปิดใช้งานปลั๊กอินอีกครั้ง
alpipego

นั่นเป็นไปไม่ได้ตามค่าเริ่มต้นไม่ว่าจะด้วยคำถามนี้หรือคำถามอื่น สิ่งที่คุณต้องทำคือยกเลิกและเปิดใช้งานปลั๊กอินเหล่านั้นอีกครั้ง (~ 3 นาทีในการทำงาน) หรือ - ในกรณีที่คุณกำลังค้นหาคำตอบอัตโนมัติ - ค้นหาฟังก์ชันในปลั๊กอินเหล่านั้นและเรียกใช้จากภายในปลั๊กอินของคุณ
ไกเซอร์

1

ในกรณีที่มีคนต้องการล้างชื่อ cron เฉพาะ (พูดว่า 'CRON_NAME') วิธีนี้ใช้ได้สำหรับฉัน:

    $crons = _get_cron_array();
    //echo "Found total ".count($crons)."<br />";
    //Keep only the ones that don't match the cron name
    $updated = array_filter($crons, function($v){return !array_key_exists("CRON_NAME",$v);});
    //echo "Reduced to ".count($updated)."<br />";        
    _set_cron_array($updated);

1

ฉันมีหนึ่งปีที่เต็มไปด้วยงาน cron ที่รออนุมัติข้อมูลประมาณ 5 Mb สำหรับรายการฐานข้อมูลเดียวนี้ ลบงาน cron ออกจากฐานข้อมูล ปิดใช้งานงาน cron ใน wp-config.php

ตั้งค่างาน cron ด้วยตนเองใน cpanel ตอนนี้เว็บไซต์ของฉันกำลังบินอย่างแท้จริง ฉันอัพเกรดเซิร์ฟเวอร์ซื้อ CPU / RAM เพิ่มขึ้น แต่ทุกอย่างก็สิ้นเปลืองเงินและเวลา

ในการลบงาน cron ที่ค้างอยู่ทั้งหมดให้รันเคียวรีนี้ใน phpmyadmin> รันเคียวรี:

UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'

ขอบคุณมากPádraigÓ Beirn


คุณยินดีต้อนรับ Preetinder! ฉันดีใจที่ได้รับความช่วยเหลือ ขอบคุณสำหรับคำแนะนำเกี่ยวกับงาน cron ที่รอดำเนินการเช่นกัน
PádraigÓ Beirn

0

หากคุณล้างภารกิจ cron ด้วยวิธีนี้และคุณใช้ UpdraftPlus คุณจะต้องบันทึกการตั้งค่าอีกครั้งเพื่อสร้างงาน cron ใหม่ จนกว่าคุณจะทำเช่นนี้การสำรองข้อมูลอัตโนมัติของคุณจะไม่ทำงาน (แต่การสำรองข้อมูลด้วยตนเองจะทำ)

การตั้งค่าจะยังคงอยู่ที่นั่นและคุณไม่จำเป็นต้องแก้ไขอะไรเลย เพียงไปที่ [อัปเดตเมนูด้านบน] -> การตั้งค่าและเลื่อนลงไปด้านล่างและคลิก "บันทึกการเปลี่ยนแปลง"


0

ฉันมาที่นี่เพราะsm_pingcronjobs มีจำนวนwp_optionsมาก หากนั่นคือปัญหาของคุณคุณสามารถลองทำสิ่งต่อไปนี้:

วางสิ่งนี้ไว้ใน functions.php (ชุดรูปแบบลูก) หากคุณไม่มีสิทธิ์เข้าถึง phpmyadmin โดยเฉพาะอย่างยิ่งหากไซต์ของคุณมี ping cronjobs (ping cronjobs) (sm_ping):

if (isset($_GET['doing_wp_cron'])) {
remove_action('do_pings', 'do_all_pings');
wp_clear_scheduled_hook('do_pings');
}

0

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

ด้วยวิธีนี้ฉันหลีกเลี่ยงการทิ้งงาน cron ที่พึงประสงค์ที่เพิ่มไว้ก่อนหน้านี้ลงในไซต์

สิ่งนี้สามารถแก้ไขได้เป็นฟังก์ชันที่ใช้อาร์เรย์ของหมายเลขอ้างอิงเพื่อกำจัดหรืออาร์เรย์ของหมายเลขอ้างอิงที่จะถูกรักษาไว้

$crons = _get_cron_array();
    $hook = 'tj_flush_w3tc_cache';
    foreach ( $crons as $timestamp => $cron ) {
    if ( isset( $cron[ $hook ] ) ) {
        unset($cron[$hook]);
    }
    if(!empty($cron))
        $newcron[$timestamp] = $cron;       
    }
    update_option('cron',$newcron);

0

ฉันมีวิธีง่ายมากในการลบเหตุการณ์ cron ทั้งหมด ก่อนหน้านี้คุณต้องปิดใช้งาน WP Cron ใน wp-config จากนั้นคุณติดตั้งปลั๊กอินการควบคุม WP จากนั้นย้ายไปที่เมนูเครื่องมือ> เหตุการณ์ Cron> คลิกเลือกทั้งหมด> ลบทั้งหมด คุณลองได้ไหม ขอบคุณ

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