Я обнаружил, что у меня есть 29 000 заданий cron в моей базе данных WordPress из деактивированных и удаленных плагинов. Я перепробовал несколько плагинов оптимизатора, но огромное количество заданий cron означает, что я не могу удалить их с помощью плагинов.
Я также попробовал это в моем functions.php без успеха:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
Есть ли какая-либо команда SQL, которую я могу использовать в phpmyadmin для поиска через крючок cron и удаления их?
Ответы:
Спасибо Privateer за быстрый ответ и совет.
Я нашел способ обойти это раньше, чем увидел твой ответ. Вот пошаговый метод удаления тысяч старых заданий cron и может быть полезен кому-то еще.
Я вошел в phpMyAdmin. Я нажал на свою базу данных, а затем на вкладку «Поиск». Я набрал 'cron', затем выбрал 'all tables' и нажал 'Go'. Я прокрутил список результатов поиска до своей таблицы wp_options. Я нажал «Обзор». В верхней части списка было имя_свойства 'cron'. Я нажал «Редактировать», затем дождался загрузки страницы. Я нажал на поле с списком заданий cron. Список cron был настолько длинным, что моему курсору потребовалось около 80 секунд, чтобы ответить. Затем я использовал Ctrl-A на клавиатуре, чтобы выбрать все, прежде чем нажать кнопку удаления. Прошло около 2 минут, прежде чем мой браузер завершил удаление (тайм-аут chrome, поэтому я попробовал Firefox, который работал).
Еще через пару минут задания cron для моих текущих активных плагинов снова заполнили список. Было 9 рабочих мест (по сравнению с 29 000!). Шесть лет дублирующих заданий cron из плохо закодированных плагинов, некоторые из которых я только что установил на день, чтобы опробовать. Также сотни из распространенных плагинов, таких как Wordfence, BackupBuddy, Nextgen Gallery и AutoOptimizer - все это я удалил в прошлом. Мой сайт теперь загружается так, как будто у него турбонаддув. Область администратора намного быстрее. Ошибки тайм-аута администратора исчезли. Я потратил так много времени на оптимизацию своего сайта, пытаясь уменьшить время загрузки. Я даже перенес хосты и обновил свои планы хостинга. Ничто так не увеличивало скорость моего сайта, как удаление всех устаревших заданий cron. Время загрузки с мобильного телефона уменьшилось с 20 до 6 секунд.
В поисках решения я обнаружил очень мало информации о влиянии заданий cron на производительность веб-сайта. Многие говорили, что это мало что меняет, и для небольшого числа рабочих мест это правда. Но многие годы жизни сайта WordPress меня интересует, сколько их раздувается сотнями, если не тысячами старых заданий cron из удаленных плагинов. Вместо того, чтобы просить пользователей проверить предел памяти php, я бы предложил разработчикам сначала попросить пользователей проверить количество заданий cron в wp_options при решении проблем с фатальными ошибками памяти. Вы можете быть удивлены / шокированы тем, что вы найдете! :-)
источник
Пытаться
Если вы найдете это, вы можете попробовать:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
update_option('cron', '');
Возможно, вам придется либо удалить опцию cron, либо установить значение пустого сериализованного массива.
Использование update_option было бы безопаснее, так как я не уверен, должно ли значение быть сериализованным пустым массивом или пустой строкой. Вы можете проверить в wp-includes / options.php, хотя ... но использование update_option будет обрабатывать его правильно, не беспокоясь о базе данных.
источник
События Wordpress cron также можно удалить из командной строки, используя WP-CLI :
Больше деталей в документах wp-cli .
источник
wp option delete cron
wp option delete cron
работает, когда в настройках есть тысячи заданий cron. Эти плохие задания происходят в основном из-за плохих плагинов, которые делают cron неправильно.Еще более простое решение -
delete_option( 'cron' );
один раз вызвать какой-нибудь плагин. Все автоматически добавленные задания cron будут добавлены снова при следующем посещении / запросе вашего сайта.Как плагин one case (mu), который запускается только при активации:
источник
В случае, если кто-то хочет очистить определенное имя cron (например, «CRON_NAME»), это решение сработало для меня:
источник
У меня был год, полный отложенных заданий cron, около 5 Мб данных для этой единственной записи в базе данных. Удалил задания cron из базы данных. Отключенные задания cron в wp-config.php
Настройте ручную работу cron в cpanel. Сейчас мой сайт буквально летает. Я обновлял серверы, покупал больше CPU / RAM, но все было пустой тратой денег и времени.
Чтобы удалить все ожидающие задания cron, выполните этот запрос в phpmyadmin> Выполнить запрос:
Большое спасибо Pádraig Ó Beirn.
источник
Если вы очистите свои задачи cron таким образом и используете UpdraftPlus, вам потребуется повторно сохранить настройки, чтобы восстановить задачи cron. Пока вы не сделаете это, ваши автоматические резервные копии не будут работать (но резервные копии будут выполняться вручную).
Настройки все еще будут там, и вам не нужно ничего редактировать. Просто зайдите в [верхнее меню UpdraftPlus] -> Настройки, прокрутите вниз и нажмите «Сохранить изменения».
источник
Я попал сюда из-за огромного количества
sm_ping
cronjobs вwp_options
. Если это ваша проблема, вы можете попробовать следующее:Поместите это в functions.php (дочерняя тема), если у вас нет доступа к phpmyadmin, особенно если ваш сайт раздут с ping cronjobs (sm_ping):
источник
Я столкнулся с подобной проблемой, когда из-за одной из моих собственных ошибок кодирования тысячи копий одного конкретного задания cron были добавлены на сайт. Похоже, что функция wp_clear_scheduled_hook отключилась. Я обошел его с помощью скрипта, который сбрасывает все экземпляры функции cron в массиве, а затем добавляет отфильтрованный массив в качестве нового параметра cron в таблицу параметров. См. ниже.
Таким образом, я избежал срыва желаемых заданий cron, ранее добавленных на сайт.
Это можно изменить как функцию, которая принимает массив дескрипторов для удаления или массив дескрипторов для сохранения.
источник
У меня есть очень простой способ удалить все события cron. Раньше вам нужно было ОТКЛЮЧИТЬ WP Cron в wp-config. Затем вы устанавливаете Plugin WP Control. Затем перейдите в меню «Инструменты»> «События Cron»> «Выделить все»> «Удалить все». Не могли бы вы попробовать это? Благодарю.
источник