Cron é um utilitário Unix/Linux que é tipicamente usado para agendar comandos ou um script em um servidor web rodando em segundo plano. Um cron job é a tarefa em si, usada para agendar tarefas em horários fixos, periódicos, datas ou intervalos. Tipicamente estas envolvem tarefas repetitivas em que são automatizadas para economizar tempo. No WordPress, isso é tratado pelo WP-Cron, usado para simular um cron do sistema.

Alguns exemplos de um cron job do WordPress podem envolver o agendamento de um artigo para publicação ou um plugin de backup rodando em um agendamento predefinido. Hoje, analisaremos como simplesmente construir, editar e executar um cron job do WordPress.

Como criar um cron job no WordPress

É importante notar que o WP-Cron é ligeiramente diferente de um cron do sistema e cada um deles tem seus próprios prós e contras. Por exemplo, o WP-Cron depende inteiramente de intervalos, enquanto um cron do sistema depende de tempos específicos. Um WP-Cron também só funciona quando a página é carregada (backend ou frontend), o que poderia ser menos confiável. Os intervalos padrões fornecidos pelo WordPress são de hora em hora, duas vezes ao dia e diariamente.

Para agendar eventos WP-Cron você tem que criar hooks personalizados. Recomendamos checar o manual oficial de plugins WordPress com um guia incrível sobre como agendar eventos WP-Cron. Se você está procurando por uma maneira alternativa de configurar um cron do sistema com o WordPress, recomendamos checar o artigo de Tom Mcfarlin sobre a definição de um cron do WordPress. E para aqueles que talvez não sejam tão avançados, vamos explorar como usar facilmente o WP-Cron com o popular plugin gratuito WP Crontrol. Isso permite que você veja e controle o que está acontecendo no sistema WP-Cron.

WP Crontrol WordPress plugin
WP Crontrol.

WP Crontrol tem mais de 200.000 instalações ativas com uma classificação impressionante de 4,5 de 5. Muitas pessoas na comunidade WordPress realmente adoram este plugin.

Este plugin é bastante útil. Mostra o que os CRON jobs devem executar, o que é um grande passo inicial para descobrir o que está acontecendo e se está funcionando ou não. Absolutamente 5 estrelas. Além disso, você pode adicionar novos cron jobs e fazer os antigos funcionarem. — Josh, criador do Caldera Forms

Você pode baixá-lo do repositório WordPress ou procurar no seu painel de controle WordPress clicando em Plugins -> Adicionar Novo. As funcionalidades do WP Control incluem:

  • Habilidade de ver todos os eventos cronológicos com seus argumentos, recorrência e tempo de execução seguinte.
  • Editar, excluir e executar imediatamente quaisquer eventos cron.
  • Adicionar novos eventos de cron.
  • Adicionar, editar e remover cron personalizados.

Cron do servidor

Se você é um cliente Kinsta, também temos um cron job no servidor, que é executado em todos os sites a cada 15 minutos. Confira nosso artigo sobre gerenciamento cron do servidor na Kinsta.

WP-Cron Schedules

Uma vez que o plugin tenha sido ativado, você pode alterar o cronograma do WordPress Cron em ‘Cron Schedules’ nas configurações do seu quadro de avisos do WordPress. O plugin acrescenta uma programação semanal padrão adicional. Você também pode adicionar horários adicionais em segundos, por exemplo, 21600 segundos a cada 6 horas.

Captura de tela do WP-Cron schedules
WP-Cron schedules.

Estes intervalos também podem ser adicionados com código usando um filtro, como, por exemplo:

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

WP-Cron Events

Você também pode usar o plugin para visualizar Cron job do WordPress já programado. Em Ferramentas, clique em Cron Events. Muitos dos nomes das ações são facilmente reconhecíveis porque devem corresponder a parte do nome do plugin, como “woocoomerce_cleanup_sessions” ou “gravityforms_cron”.

wp-cron events
WP-Cron events.

Você executa um evento Cron imediatamente, simplesmente clicando em “Run Now” ao lado do nome da ação. Isso pode ser útil na hora de resolver problemas, pois você pode precisar executar um evento Cron várias vezes.

Evento cron executado com sucesso.
Evento cron executado com sucesso.

Modificando o Cron Event

Você também pode editar eventos Cron existentes clicando em “Edit” ao lado do nome da ação. Você pode então mudar o nome da ação, os argumentos, a próxima execução e a recorrência programada. Tenha cuidado com isso, embora muitos plugins dependam de suas tarefas Cron para funcionar corretamente.

Modificando o Cron Event.
Modificando o Cron Event.

Adicionando Cron Event

Você também pode adicionar eventos Cron. Neste exemplo, vamos adicionar o cron job do WordPress para o plugin Disqus. Muitos podem querer alterar a frequência de sincronização ou se eles tiverem problemas com a sincronização de comentários. A documentação de cada desenvolvedor de plugins de terceiros deve ter o nome do seu evento cron, ou melhor, o nome da ação. Neste caso, é “dsq_sync_forum” que está sendo usado pelo plugin.

Se você estiver criando um do zero, você precisará de um hook de ação correspondente em algum lugar do seu código, como o seu arquivo functions.php. Este é o exemplo que o WP-Crontrol dá:

add_action( 'my_hookname', 'my_function' );

O próximo passo é escrever à sua função.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

Para Disqus, primeiro adicionamos um novo cronograma de 600 segundos (10 minutos). Em seguida, clicamos em “Add Cron Event” e inserimos “dsq_sync_forum” como nosso nome de ação, escolhemos o próximo tempo de execução e escolhemos a recorrência de 10 minutos que acabamos de criar. Então, clicamos em “Add Cron Event”. Isso agora será executado automaticamente a cada 10 minutos para podermos sincronizar manualmente os comentários Disqus de volta ao nosso banco de dados WordPress.

Adicionando Cron job do WordPress.
Adicionando Cron job do WordPress.

E é só isso! É realmente muito fácil de usar.

WP-Cron WP-CLI

Você também pode gerenciar eventos WP-Cron e/ou um Cron job do WordPress no WP-CLI. Por exemplo, o seguinte comando lhe dará sua lista de eventos cron atual.

wp cron event list

wp-cron event list

Veja a documentação oficial do cron WP-CLI para comandos e parâmetros adicionais.

Como adicionar um Cron Job usando o cPanel

Se você está usando uma hospedagem de sites que lhe dá acesso a uma conta cPanel, você pode usar o painel de controle para configurar cron jobs. Para fazer isso, acesse sua conta no cPanel e vá para Advanced > Cron Jobs:

Encontre o Cron jobs no cPanel
Cron Jobs no cPanel.

A página de configurações do Cron Jobs inclui opções para configurar as notificações de cron job e criar novas notificações. Para adicionar um cron job, vá até a seção Add New Cron Job.

Aqui, você conseguirá configurar a frequência do comando:

Configurar a frequência da demanda
Adicionar novo Cron Job.

O menu Common Settings inclui várias opções pré-configuradas, variando de uma vez por minuto a uma vez por ano. Você pode usar qualquer uma destas opções ou modificar os campos abaixo para inserir um valor personalizado:

Digite valores personalizados.
Digite valores personalizados.

Uma vez que você configurou a frequência do cron job, você pode adicionar o comando que ele executará sob o campo Command. Salve o cron job clicando em Add New Cron Job. Agora, ele aparecerá sob a lista de Current Cron Jobs no final da página.

Como adicionar um Cron Job no NGINX

Adicionar um cron job no NGINX é relativamente simples se você estiver confortável usando o terminal e escrevendo scripts. Para começar, abra o terminal e digite o seguinte comando:

Sudo crontab -e

Isso abrirá o arquivo de configuração do cron. Cada linha no arquivo inclui um cron job único que deve ser parecido com este:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Para adicionar um novo cron job no NGINX, você precisará entender o que esse comando faz. Os primeiros números e asteriscos especificam quando o cron job deve ser executado.

Cada número ou símbolo representa os seguintes valores, em ordem de aparecimento da esquerda para à direita:

  1. Minutos
  2. Hora
  3. Dia do mês
  4. Mês
  5. Dia da semana

Esse comando diz ao NGINX para executar o arquivo cron.php todos os dias às 13 horas em ponto. Usamos asteriscos para o resto dos valores porque eles não são necessários para este trabalho específico de cron.php, mas sua quilometragem pode variar.

Além de especificar qual arquivo executar, o comando também diz ao cron job para descartar qualquer saída como erros com o adendo >/dev/null . Alternativamente, você pode optar por salvar qualquer saída desse tipo em um arquivo de registro.

Uma vez que você tenha terminado de modificar o arquivo de configuração do cron, você pode salvar suas alterações e fechá-lo. Agora seu servidor NGINX executará aquele cron job usando a configuração que você definiu para ele.

Como adicionar um Cron Job na Kinsta

Há duas maneiras de adicionar um cron na Kinsta. A primeira abordagem envolve acessar seu site via SSH e executar o comando crontab -e.

Uma vez que você executar esse comando, Kinsta lhe perguntará qual editor você gostaria de usar. Então, ele abrirá o arquivo de configuração do cron usando esse editor.

Você pode adicionar cron jobs ao arquivo de configuração criando novos comandos em linhas separadas. Um comando cron job deve se parecer com isto:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Você pode ler mais sobre como estruturar os comandos cron na seção anterior, onde examinamos como usar o comando crontab -e no NGINX. Se você preferir não adicionar o cron job manualmente, você pode pedir à equipe de suporte da Kinsta para fazer isso por você.

Tenha em mente que Kinsta não pode editar cron jobs para você e simplesmente carregaremos os comandos conforme você os fornecer. Se você precisar de ajuda para configurar o comando cron, recomendamos verificar esta documentação crontab.

Como desativar o WP-Cron

Em alguns casos, o uso da função WP-Cron pode causar problemas com o seu site. O WP-Cron não é um cron job “real”, mas uma função que imita como eles funcionam. Ao invés de rodar continuamente, o WordPress roda o script wp-cron.php toda vez que uma página é carregada.

Esta abordagem pode causar problemas com sites de alto tráfego, já que você precisará dedicar recursos para rodar o wp-cron.php em cada carregamento de página. Se o script não rodar devido ao carregamento de páginas, seus comandos programados podem falhar, já que o wp-cron.php não está “verificando” os intervalos.

Se você estiver tendo problemas com o WP-cron, você pode desativar a função adicionando o seguinte código ao arquivo wp-config.php do WordPress:

define('DISABLE_WP_CRON', true);

Salve as mudanças no arquivo e pronto. Entretanto, se você optar por desativar o WP-Cron, você precisará configurar uma alternativa usando qualquer um dos métodos anteriores neste tutorial.