Descobri que tenho 29.000 trabalhos cron em meu banco de dados WordPress a partir de plugins desativados e excluídos. Eu tentei vários plugins otimizadores, mas o grande número de trabalhos cron significa que não posso excluí-los usando plugins.
Eu também tentei isso no meu functions.php sem sucesso:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
Existe algum comando SQL que eu possa usar no phpmyadmin para pesquisar pelo cron hook e removê-los?
Respostas:
Obrigado Privateer pela pronta resposta e conselhos.
Eu encontrei uma maneira de contornar isso antes de ver sua resposta. Aqui está um método passo a passo para excluir milhares de tarefas cron antigas e pode ser útil para outra pessoa.
Eu entrei no phpMyAdmin. Eu cliquei no meu banco de dados e depois na guia 'pesquisa'. Digitei 'cron', selecionei 'all tables' e cliquei em 'Go'. Rolei a lista de resultados da pesquisa para a minha tabela wp_options. Eu cliquei em 'Procurar'. No topo da lista estava option_name 'cron'. Cliquei em "Editar" e aguardei o carregamento da página. Cliquei na caixa que mostrava a lista de tarefas cron. A lista cron era tão longa que demorou cerca de 80 segundos para o meu cursor responder. Eu então usei Ctrl-A no teclado para selecionar tudo antes de pressionar o botão excluir. Demorou cerca de 2 minutos para o meu navegador concluir a exclusão (o tempo limite do chrome expirou, então tentei o Firefox, que funcionava).
Depois de alguns minutos, os trabalhos do cron para meus plug-ins ativos atuais preencheram novamente a lista. Havia 9 trabalhos cron (abaixo dos 29.000!). Seis anos de trabalhos cron duplicados a partir de plugins mal codificados, alguns dos quais eu instalei por um dia para experimentar. Também centenas de plugins comuns, como Wordfence, BackupBuddy, Nextgen Gallery e AutoOptimizer - todos os quais eu havia desinstalado no passado. Meu site agora carrega como se tivesse sido carregado com turbo. A área administrativa é muito mais rápida. Os erros de tempo limite do administrador desapareceram. Eu gastei muito tempo otimizando meu site tentando diminuir o tempo de carregamento. Eu até mudei hosts e atualizei meus planos de hospedagem. Nada aumentou a velocidade do meu site como excluir todos os trabalhos cron desatualizados. O tempo de download em dispositivos móveis diminuiu de 20 segundos para 6 segundos.
Na minha busca por uma solução, encontrei muito poucas informações sobre o efeito dos trabalhos do cron no desempenho do site. Muitos disseram que isso fez pouca diferença e, para um pequeno número de trabalhos cron, isso é verdade. Mas, anos após a vida de um site WordPress, pergunto-me quantos estão inchados com centenas, senão milhares, de trabalhos cron antigos de plug-ins excluídos. Em vez de pedir aos usuários que verifiquem seu limite de memória php, sugiro que os desenvolvedores primeiro solicitem aos usuários que verifiquem o número de trabalhos cron em wp_options ao solucionar problemas fatais de memória. Você pode ficar surpreso / chocado com o que encontra! :-)
fonte
Experimentar
Se você o encontrar, tente:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
update_option('cron', '');
Pode ser necessário excluir a opção cron ou configurar o valor para uma matriz serializada vazia.
Usar update_option seria mais seguro, pois não tenho certeza se o valor deve ser uma matriz vazia serializada ou uma string vazia. Você pode verificar o arquivo wp-includes / options.php ... mas usar o update_option irá lidar com isso corretamente sem se preocupar com o banco de dados.
fonte
Os eventos cron do Wordpress também podem ser limpos na linha de comando, usando o WP-CLI :
Mais detalhes nos documentos wp-cli .
fonte
wp option delete cron
wp option delete cron
funciona quando existem milhares de trabalhos cron preenchidos nas opções. Esses trabalhos ruins vêm principalmente de plugins ruins, fazendo o cron da maneira errada.Uma solução ainda mais simples é chamar
delete_option( 'cron' );
uma vez em algum plugin. Todos os trabalhos cron adicionados automaticamente serão adicionados novamente na próxima visita / solicitação do seu site.Como um plug-in de um caso (mu), que é executado apenas quando você o ativa:
fonte
Caso alguém queira limpar um nome cron específico (por exemplo, 'CRON_NAME'), esta solução funcionou para mim:
fonte
Eu tive um ano cheio de trabalhos cron pendentes, cerca de 5 Mb de dados para essa entrada única no banco de dados. Excluídos os trabalhos cron do banco de dados. Tarefas cron desabilitadas em wp-config.php
Configure um trabalho cron manual no cpanel. Agora meu site está literalmente voando. Eu estava atualizando servidores, comprando mais CPU / RAM, mas tudo era um desperdício de dinheiro e tempo.
Para excluir todos os trabalhos cron pendentes, execute esta consulta em phpmyadmin> Executar consulta:
Muito obrigado Pádraig Ó Beirn.
fonte
Se você limpar as tarefas do cron dessa maneira e usar o UpdraftPlus, precisará salvar novamente suas configurações para gerar novamente as tarefas do cron. Até você fazer isso, seus backups automatizados não serão executados (mas os backups manuais).
As configurações ainda estarão lá e você não precisará editar nada. Basta ir ao [menu superior do UpdraftPlus] -> Configurações, e role para baixo até a parte inferior e clique em "Salvar alterações".
fonte
Cheguei aqui por causa da enorme quantidade de
sm_ping
cronjobswp_options
. Se esse for o seu problema, você pode tentar o seguinte:Coloque isso em functions.php (tema filho) se você não tiver acesso ao phpmyadmin, especialmente se o seu site estiver cheio de ping cronjobs (sm_ping):
fonte
Corri para um problema semelhante, onde, devido a um dos meus próprios erros de codificação, milhares de cópias de um determinado trabalho cron foram adicionadas a um site. A função wp_clear_scheduled_hook parecia expirar e falhar. Eu contornei com um script que desmarcou todas as instâncias da função cron dentro da matriz e, em seguida, adiciona a matriz filtrada como a nova opção cron na tabela de opções. Ver abaixo.
Dessa maneira, evitei desfazer os trabalhos cron desejáveis adicionados anteriormente ao site.
Isso pode ser modificado como uma função que leva uma matriz de identificadores para eliminar ou uma matriz de identificadores a ser preservada.
fonte
Eu tenho uma maneira muito simples de excluir todos os eventos cron. Antes, era necessário DESATIVAR o WP Cron no wp-config. Depois, instale o Controle WP do plug-in. Em seguida, vá para o menu Ferramenta> Eventos do cron> Clique em escolheu todos> Excluir todos eles. Você poderia tentar? Obrigado.
fonte