Ich habe festgestellt, dass meine WordPress-Datenbank 29.000 Cron-Jobs aus deaktivierten und gelöschten Plugins enthält. Ich habe eine Reihe von Optimierer-Plugins ausprobiert, aber die große Anzahl von Cron-Jobs bedeutet, dass ich sie nicht mit Plugins löschen kann.
Ich habe auch versucht, dies in meinem functions.php ohne Erfolg:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
Gibt es einen SQL-Befehl, den ich in phpmyadmin verwenden kann, um nach Cron-Hooks zu suchen und diese zu entfernen?
Antworten:
Vielen Dank an Privateer für die prompte Antwort und den Rat.
Ich habe einen Weg gefunden, bevor ich deine Antwort gesehen habe. Hier finden Sie eine schrittweise Methode zum Löschen von Tausenden von alten Cron-Jobs, die möglicherweise für andere von Nutzen sind.
Ich habe mich bei phpMyAdmin angemeldet. Ich klickte auf meine Datenbank und dann auf die Registerkarte "Suche". Ich habe 'cron' eingegeben, dann 'alle Tabellen' ausgewählt und auf 'Los' geklickt. Ich habe die Liste der Suchergebnisse zu meiner Tabelle wp_options gescrollt. Ich habe auf "Durchsuchen" geklickt. Ganz oben auf der Liste stand Optionsname 'cron'. Ich habe auf "Bearbeiten" geklickt und darauf gewartet, dass die Seite geladen wird. Ich klickte auf das Kästchen mit der Liste der Cronjobs. Die Cron-Liste war so lang, dass es ungefähr 80 Sekunden dauerte, bis mein Cursor reagierte. Ich habe dann Strg-A auf der Tastatur verwendet, um alle auszuwählen, bevor ich auf die Schaltfläche Löschen geklickt habe. Es dauerte ungefähr 2 Minuten, bis mein Browser den Löschvorgang abgeschlossen hatte (Chrome Timeout, also habe ich Firefox ausprobiert, was funktionierte).
Nach ein paar Minuten haben die Cron-Jobs für meine derzeit aktiven Plugins die Liste neu gefüllt. Es gab 9 Cron-Jobs (von über 29.000!). Sechs Jahre doppelte Cron-Jobs von schlecht codierten Plugins, von denen ich einige nur für einen Tag zum Ausprobieren installiert habe. Auch Hunderte von gängigen Plugins wie Wordfence, BackupBuddy, Nextgen Gallery und AutoOptimizer, die ich in der Vergangenheit deinstalliert hatte. Meine Website wird jetzt geladen, als wäre sie aufgeladen. Der Admin-Bereich ist viel schneller. Admin-Timeout-Fehler sind verschwunden. Ich hatte so viel Zeit mit der Optimierung meiner Website verbracht, um die Ladezeit zu verkürzen. Ich habe sogar die Hosts gewechselt und meine Hosting-Pläne aktualisiert. Nichts hat die Geschwindigkeit meiner Site erhöht, so wie das Löschen aller veralteten Cron-Jobs. Die Downloadzeit für Mobilgeräte wurde von 20 Sekunden auf 6 Sekunden verringert.
Auf meiner Suche nach einer Lösung fand ich nur sehr wenige Informationen über die Auswirkung von Cronjobs auf die Website-Leistung. Viele sagten, es mache wenig Unterschied und für eine kleine Anzahl von Cronjobs ist das wahr. Aber nach Jahren im Leben einer WordPress-Site frage ich mich, wie viele mit Hunderten, wenn nicht Tausenden von alten Cron-Jobs aus gelöschten Plugins aufgebläht sind. Anstatt die Benutzer aufzufordern, ihr PHP-Speicherlimit zu überprüfen, würde ich vorschlagen, dass die Entwickler die Benutzer zuerst auffordern, die Anzahl der Cron-Jobs in wp_options zu überprüfen, wenn schwerwiegende Speicherfehler behoben werden. Sie können überrascht / schockiert sein, was Sie finden! :-)
quelle
Versuchen
Wenn Sie es finden, können Sie versuchen:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
update_option('cron', '');
Möglicherweise müssen Sie entweder die Option cron löschen oder den Wert auf ein leeres serialisiertes Array festlegen.
Die Verwendung von update_option wäre sicherer, da ich nicht sicher bin, ob der Wert ein serialisiertes leeres Array oder eine leere Zeichenfolge sein soll. Sie könnten zwar in wp-includes / options.php einchecken ... aber die Verwendung von update_option erledigt dies ordnungsgemäß, ohne sich um die Datenbank zu kümmern.
quelle
Wordpress-Cron-Ereignisse können auch über die Befehlszeile mit WP-CLI gelöscht werden :
Weitere Details finden Sie in den wp-cli-Dokumenten .
quelle
wp option delete cron
wp option delete cron
funktioniert, wenn die Optionen Tausende von Cronjobs enthalten. Diese schlechten Jobs kommen meistens von schlechten Plugins, die sich falsch verhalten.Eine noch einfachere Lösung besteht darin,
delete_option( 'cron' );
ein Plugin einmal aufzurufen . Alle automatisch hinzugefügten Cron-Jobs werden beim nächsten Besuch / Aufruf Ihrer Site erneut hinzugefügt.Als One-Case (mu) -Plugin, das nur ausgeführt wird, wenn Sie es aktivieren:
quelle
Für den Fall, dass jemand einen bestimmten Cron-Namen löschen wollte (sagen Sie 'CRON_NAME'), funktionierte diese Lösung für mich:
quelle
Ich hatte ein Jahr voller ausstehender Cron-Jobs, ungefähr 5 MB Daten für diesen einzelnen Datenbankeintrag. Löschte die Cron-Jobs aus der Datenbank. Inaktivierte Cron-Jobs in wp-config.php
Richten Sie einen manuellen Cron-Job in cpanel ein. Jetzt fliegt meine Seite buchstäblich. Ich hatte Server aufgerüstet, mehr CPU / RAM gekauft, aber alles war eine Verschwendung von Geld und Zeit.
Um alle ausstehenden Cron-Jobs zu löschen, führen Sie diese Abfrage in phpmyadmin> Abfrage ausführen aus:
Vielen Dank, Pádraig Ó Beirn.
quelle
Wenn Sie Ihre Cron-Aufgaben auf diese Weise löschen und UpdraftPlus verwenden, müssen Sie Ihre Einstellungen erneut speichern, um die Cron-Aufgaben neu zu generieren. Bis dahin werden Ihre automatisierten Sicherungen nicht ausgeführt (manuelle Sicherungen jedoch).
Die Einstellungen bleiben erhalten und Sie müssen nichts bearbeiten. Gehen Sie einfach zu [UpdraftPlus-Hauptmenü] -> Einstellungen und scrollen Sie nach unten und klicken Sie auf "Änderungen speichern".
quelle
Ich bin hierher gekommen, weil es so viele
sm_ping
Cronjobs gibtwp_options
. Wenn dies Ihr Problem ist, können Sie Folgendes versuchen:Fügen Sie dies in die Datei functions.php (untergeordnetes Thema) ein, wenn Sie keinen Zugriff auf phpmyadmin haben, insbesondere, wenn Ihre Site mit Ping-Cronjobs (sm_ping) überfüllt ist:
quelle
Ich bin auf ein ähnliches Problem gestoßen, bei dem aufgrund eines meiner eigenen Codierungsfehler Tausende Kopien eines bestimmten Cron-Jobs zu einer Site hinzugefügt wurden. Die Funktion wp_clear_scheduled_hook hat eine Zeitüberschreitung und ist fehlgeschlagen. Ich habe es mit einem Skript umgangen, das alle Instanzen der Cron-Funktion innerhalb des Arrays deaktiviert und dann das gefilterte Array als neue Cron-Option in die Optionstabelle einfügt. Siehe unten.
Auf diese Weise habe ich vermieden, die gewünschten Cron-Jobs wegzublasen, die zuvor zur Site hinzugefügt wurden.
Dies kann als eine Funktion geändert werden, die ein Array von zu entfernenden Handles oder ein Array von zu bewahrenden Handles benötigt.
quelle
Ich habe eine sehr einfache Möglichkeit, alle Cron-Ereignisse zu löschen. Vorher müssen Sie WP Cron in wp-config DEAKTIVIEREN. Anschließend installieren Sie das Plugin WP Control. Gehen Sie dann zu Tool> Cron-Ereignisse> Klicken Sie auf Alle auswählen> Alle löschen. Könntest du es versuchen? Vielen Dank.
quelle