Odkryłem, że mam 29 000 zadań cron w mojej bazie danych WordPress z dezaktywowanych i usuniętych wtyczek. Wypróbowałem wiele wtyczek optymalizatora, ale ogromna liczba zadań cron oznacza, że nie mogę ich usunąć za pomocą wtyczek.
Próbowałem również tego w moich funkcjach.php bez powodzenia:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
Czy jest jakieś polecenie SQL, którego mogę użyć w phpmyadmin do wyszukiwania za pomocą cron hook i usuwania ich?
Odpowiedzi:
Dzięki Privateer za szybką odpowiedź i poradę.
Znalazłem sposób na obejście tego, zanim zobaczyłem twoją odpowiedź. Oto krok po kroku metoda usuwania tysięcy starych zadań cron i może być przydatna dla kogoś innego.
Zalogowałem się do phpMyAdmin. Kliknąłem bazę danych, a następnie zakładkę „Szukaj”. Wpisałem „cron”, potem wybrałem „wszystkie tabele” i kliknąłem „Idź”. Przewinąłem listę wyników wyszukiwania do mojej tabeli wp_options. Kliknąłem „Przeglądaj”. Na początku listy znajdowała się nazwa_opcji „cron”. Kliknąłem „Edytuj”, a następnie czekałem na załadowanie strony. Kliknąłem na pole pokazujące listę zadań crona. Lista cronów była tak długa, że odpowiedź mojego kursora zajęła około 80 sekund. Następnie użyłem Ctrl-A na klawiaturze, aby zaznaczyć wszystkie przed naciśnięciem przycisku usuwania. Minęło około 2 minut, zanim moja przeglądarka zakończyła usuwanie (upłynął limit czasu Chrome, więc wypróbowałem Firefoksa, który zadziałał).
Po kolejnych kilku minutach zadania crona dla moich aktywnych aktywnych wtyczek ponownie wypełniły listę. Było 9 zleceń cron (w porównaniu z ponad 29 000!). Sześć lat zdublowanych zadań crona ze źle zakodowanych wtyczek, z których niektóre właśnie zainstalowałem na jeden dzień, aby wypróbować. Również setki popularnych wtyczek, takich jak Wordfence, BackupBuddy, Nextgen Gallery i AutoOptimizer - z których wszystkie odinstalowałem w przeszłości. Moja strona ładuje się teraz tak, jakby była turbodoładowana. Obszar administracyjny jest znacznie szybszy. Błędy przekroczenia limitu czasu administratora zniknęły. Spędziłem tyle czasu na optymalizacji mojej witryny, próbując skrócić czas ładowania. Przeprowadziłem nawet hosty i zaktualizowałem swoje plany hostingowe. Nic tak nie przyspieszyło mojej witryny, jak usunięcie wszystkich nieaktualnych zadań crona. Skrócono czas pobierania z telefonu komórkowego z 20 sekund do 6 sekund.
W poszukiwaniu rozwiązania znalazłem bardzo mało informacji na temat wpływu zleceń cron na wydajność witryny. Wielu twierdziło, że nie ma to większego znaczenia i jest to prawdą w przypadku niewielkiej liczby zadań cron. Ale lata w życiu witryny WordPress Zastanawiam się, ile z nich to setki, jeśli nie tysiące starych zadań cron z usuniętych wtyczek. Zamiast prosić użytkowników o sprawdzenie limitu pamięci php, sugeruję, aby programiści najpierw poprosili użytkowników o sprawdzenie liczby zadań cron w wp_options podczas rozwiązywania krytycznych błędów pamięci. Możesz być zaskoczony / zszokowany tym, co znajdziesz! :-)
źródło
Próbować
Jeśli go znajdziesz, możesz spróbować:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
update_option('cron', '');
Może być konieczne usunięcie opcji cron lub ustawienie wartości na pustą szeregowaną tablicę.
Korzystanie z opcji update_option byłoby bezpieczniejsze, ponieważ nie jestem pewien, czy wartość powinna być serializowaną pustą tablicą, czy pustym łańcuchem. Możesz wprawić wp-include / options.php ... ale użycie update_option da sobie z tym radę bez obawy o bazę danych.
źródło
Zdarzenia cron Wordpress można również usunąć z wiersza poleceń, używając WP-CLI :
Więcej szczegółów w dokumentach wp-cli .
źródło
wp option delete cron
wp option delete cron
działa, gdy w opcjach są tysiące zadań cron. Te złe prace pochodzą głównie ze złych wtyczek, robiąc crona w niewłaściwy sposób.Jeszcze prostszym rozwiązaniem jest wywołanie
delete_option( 'cron' );
raz wtyczki. Wszystkie automatycznie dodane zadania CRON zostaną dodane ponownie przy następnej wizycie / żądaniu Twojej witryny.Jako wtyczka działająca w jednym przypadku (mu), która działa tylko za każdym razem, gdy ją aktywujesz:
źródło
W przypadku, gdy ktoś chciał wyczyścić konkretną nazwę crona (powiedz „CRON_NAME”), to rozwiązanie działało dla mnie:
źródło
Miałem rok pełen oczekujących zadań crona, około 5 Mb danych dla tego pojedynczego wpisu bazy danych. Usunięto zadania cron z bazy danych. Wyłączono zadania cron w wp-config.php
Skonfiguruj ręczne zadanie CRON w cpanel. Teraz moja strona dosłownie lata. Aktualizowałem serwery, kupowałem więcej procesora / pamięci RAM, ale wszystko to strata pieniędzy i czasu.
Aby usunąć wszystkie oczekujące zadania cron, uruchom to zapytanie w phpmyadmin> Uruchom zapytanie:
Wielkie dzięki Pádraig Ó Beirn.
źródło
Jeśli wyczyścisz w ten sposób swoje zadania cron i użyjesz UpdraftPlus, będziesz musiał ponownie zapisać ustawienia, aby zregenerować zadania cron. Dopóki tego nie zrobisz, automatyczne kopie zapasowe nie będą działać (ale ręczne kopie zapasowe będą działać).
Ustawienia nadal będą dostępne i nie trzeba niczego edytować. Wystarczy przejść do [górnego menu UpdraftPlus] -> Ustawienia, przewiń w dół i kliknij „Zapisz zmiany”.
źródło
sm_ping
Przybyłem tu z powodu ogromnej ilości cronjobswp_options
. Jeśli to jest twój problem, możesz spróbować:Umieść to w functions.php (motyw potomny), jeśli nie masz dostępu do phpmyadmin, szczególnie jeśli Twoja strona jest rozdęta przez ping cronjobs (sm_ping):
źródło
Zetknąłem się z podobnym problemem, w którym z powodu jednego z moich własnych błędów kodowania tysiące stron jednego konkretnego zadania crona zostało dodanych do strony. Funkcja wp_clear_scheduled_hook pojawiła się i przekroczyła limit czasu. Obejrzałem go za pomocą skryptu, który rozbroił wszystkie instancje funkcji cron w tablicy, a następnie dodaje filtrowaną tablicę jako nową opcję cron w tabeli opcji. Patrz poniżej.
W ten sposób uniknąłem zdmuchiwania pożądanych zadań crona wcześniej dodanych do strony.
Można to zmodyfikować jako funkcję, która zabiera tablicę uchwytów do wyeliminowania lub tablicę uchwytów do zachowania.
źródło
W bardzo prosty sposób mogę usunąć wszystkie zdarzenia cron. Przedtem musisz WYŁĄCZYĆ WP Cron w wp-config. Następnie zainstaluj wtyczkę Kontrola WP Następnie przejdź do menu Narzędzia> Zdarzenia Cron> Kliknij wybierz wszystko> Usuń wszystkie. Czy możesz tego spróbować? Dzięki.
źródło