問題描述

我發現我的 WordPress 數據庫中已停用和刪除的插件有 29,000 個 cron 作業。我已經嘗試了一些優化器插件,但是大量的 cron 作業意味着我無法使用插件刪除它們。

我也在我的 functions.php 中嘗試過沒有成功:

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

有沒有可以使用 phpmyadmin 中的 SQL 命令來搜索 cron hook 並刪除它們?

最佳解決方案

感謝 Privateer 提供及時的回覆和建議。

在我看到你的答案之前,我找到了一個方法。這是一個 step-by-step 方法,用於刪除數千箇舊的 cron 作業,可能對其他人有用。

我登錄到 phpMyAdmin 。我點擊了我的數據庫,然後點擊了’search’ 選項卡。我鍵入’cron’,然後選擇’all tables’,然後單擊’Go’ 。我向下滾動搜索結果列表到我的 wp_options 表。我點了’Browse’ 。列表頂部是 option_name ‘cron’ 。我點了’Edit’,然後等待頁面加載。我點擊顯示 cron 作業列表的框。 cron 列表太長了,我的光標需要大約 80 秒的時間來響應。然後在鍵盤上使用 Ctrl-A,然後點擊刪除按鈕。我的瀏覽器完成刪除大約 2 分鐘 (chrome timed-out,所以我嘗試過 Firefox) 。

再過幾分鐘,cron 工作為我當前的活動插件 re-populated 列表。有 9 個 cron 工作 (低於 29,000!) 。六年的重複 cron 工作來自嚴重編碼的插件,其中一些我剛剛安裝了一天試用。還有數百個常見的插件,如 Wordfence,BackupBuddy,Nextgen Gallery 和 AutoOptimizer – 所有這些都是我以前卸載的。我的網站現在加載就像是 turbo-charged 。管理區域要快得多管理員超時錯誤消失了。我花了很多時間優化我的網站,試圖減少加載時間。我甚至移動了主機並升級了我的託管計劃。沒有什麼會增加我的網站的速度,像刪除所有過時的 cron 工作。移動下載時間從 20 秒減少到 6 秒。桌面下載時間從 12 秒降至 4 秒。

在尋找解決方案時,我發現很少有關於 cron 作業對網站性能的影響的信息。許多人説它沒有什麼區別,而對於少數的 cron 工作是真的。但是,在 WordPress 網站生活的歲月裏,我想知道有多少人因為刪除的插件而成百上千的老 cron 工作。而不是要求用户檢查他們的 PHP 內存限制,我建議開發人員首先要求用户在解決問題的致命內存錯誤時,檢查 wp_options 中 cron 作業的數量。你可能會驚訝/震驚你發現什麼! 🙂

次佳解決方案

嘗試

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-includes /options.php 雖然… 但使用 update_option 將正確處理它,而不用擔心數據庫。

第三種解決方案

一個更簡單的解決方案是在一些插件中調用 delete_option( 'cron' ); 一次。所有自動添加的 cron 作業將在您的站點的下次訪問/請求中再次添加。

作為一個例子 (mu) 插件,只有當你激活它運行:

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。