WordPress CRON – Execute trabalhos em segundo plano pelo Linux
Neste artigo pretendo abordar o WordPress CRON, que é importante quando temos plugins ou outro software que coleta, organiza, resolve alguma tarefa em segundo plano. Bem como mostrar como podemos fazer o mesmo através do CRON no Linux.
O WordPress implementa um sistema de CRON, para que seja possível correr em segundo plano tarefas que não sejam necessária correr no momento em que uma determinada pagina é dinamicamente criada para ser enviada ao visitante. Pois caso contrario aumenta o tempo que o visitante está à espera de um determinado conteúdo. O sistema implementado pelo WordPress tem tudo a ver com o sistema de CRON que é implementado nos sistemas Linux. No entanto a lógica é modificada para que possa trabalhar em um ambiente WEB.
O WordPress permite criar tarefas em segundo plano, que corram em determinados período de tempo. No entanto não é possível garantir que os trabalhos serão realmente realizados nesse determinado período porque o sistema está dependente dos pedidos por paginas feitos ao servidor. No caso de um site que seja bastante concorrido não existe problema pois um pedido irá despoletar o sistema de CRON do WordPress. No entanto para sites que têm poucas visitas não é possível garantir que os trabalhos em segundo plano sejam realizados.
O facto de o WordPress CRON ser despoletado pelos pedidos ao servidor, faz que determinados pedidos sejam mais lentos, que a pagina demore mais a ser entregue ao visitante. A razão é que se o WordPress tiver algum trabalho que necessite correr no momento em que a visita é feita, o WordPress inicia esse trabalho. Como tudo o que é processado exige tempo, o tempo necessário para iniciar os trabalhos é acrescentado na corrente visita.
Se não tivermos outra forma de correr as nossos trabalhos em segundo plano o WordPress CRON é excelente. Pois iremos correr as nossas tarefas em segundo plano. No entanto se tivermos outra forma de correr os nossos trabalhos devemos usa-la para tirar a carga sobre os pedidos feitos pelos visitantes, dando uma melhor impressão aos nossos visitantes pois as paginas são visualizadas mais rápido.
O WordPress é um CMS muito flexível que nos permite modificar o seu funcionamento de forma simples. Sendo possível passar os trabalhos em segundo plano para o CRON no sistema operativo Linux.
Desativar o WordPress CRON
Devemos desativar o WordPress CRON nos casos em que não temos nenhum software que necessite de correr trabalhos em segundo plano, bem como se pretendermos passar esse trabalho para o CRON do sistema operativo.
Para podermos desativar o WordPress CRON iremos necessitar de editar o ficheiro de configuração do WordPress.
O ficheiro “wp-config.php” normalmente está na raiz do sistema web.
Necessitamos adicionar a seguinte linha.
define( 'DISABLE_WP_CRON', true );
Neste caso estamos a definir a constante “DISABLE_WP_CRON” como verdadeira. As constantes não podem mais ser modificadas a partir do momento que são definidas. Portanto desta forma a mesma constante não poderá ser definida pelo WordPress com um valor diferente.
A linha acima terá que ser adicionada antes da seguinte linha.
require_once(ABSPATH . 'wp-settings.php');
A razão é que o ficheiro “wp-settings.php” tem como objetivo definir entre outras coisas as constantes do WordPress com os seus valores por defeito.
Agendar uma tarefa CRON no Linux
Agendar uma tarefa no CRON do sistema Linux é fácil, desde que tenhamos acesso ao sistema através de uma SHELL. Existe situações, basicamente em servidores partilhados em que só temos o painel de controlo para acessar ao nosso sistema. Esta configuração parte do principio que temos acesso através de uma shell.
Necessidades
Para agendar uma tarefa, necessitamos de alguns dados que vão de encontro com as necessidades de um determinado projeto.
Pode ler aqui mais sobre o CRON.
Basicamente necessitamos de saber:
- De quanto em quanto tempo necessitamos de correr um trabalho;
- O caminho “PATH” completo onde se encontra o ficheiro “wp-cron.php“;
- Se temos o php-cli instalado no nosso sistema ou não;
- Decidir se pretendemos correr através de (php-fpm, php-cgi) ou php-cli.
Agendar uma tarefa
Para que possamos editar a nossa agenda de tarefas no servidor corremos o seguinte comando no terminal.
crontab -e
Este comando apresenta nos um editor de texto para que possamos editar a nossa agenda. Neste momento podemos adicionar uma linha com os parâmetros que se ajuste ao nosso projeto.
Usando php-cli
Quando corremos os nossos trabalhos via CLI estamos a tirar o serviço web da equação. Esta forma na minha opinião é a melhor pois não estamos a carregar o nosso serviço web Apache/Nginx etc. Permite-nos correr tarefas mais complicadas que usam mais tempo. Visto que em CLI não existe tempo limite para correr um script PHP.
Adicionamos a seguinte linha no terminal.
*/5 * * * * cd /var/www/html/; /usr/bin/php wp-cron.php
A linha anterior tem o seguinte significado:
- “*/5 * * * *” – Neste caso pretendo executar este trabalho de 5 em 5 minutos;
- “cd /var/www/html/;” – Mudar para o diretório onde se encontra o ficheiro “wp-cron.php”;
- “/usr/bin/php wp-cron.php” – Interpretar o ficheiro “wp-cron.php” com o php.
Usando php-fpm ou php-cgi
Este modo na minha opinião não deve ser usado a não ser que seja obrigatório de alguma forma. Este modo sub carrega o serviço web, tem limite por defeito para correr um determinado serviço, etc.
*/5 * * * * curl https://www.ncdc.pt/wp-cron.php > /dev/null 2>&1
A linha anterior tem o seguinte significado:
- “*/5 * * * *” – Neste caso pretendo executar este trabalho de 5 em 5 minutos;
- “curl https://www.ncdc.pt/wp-cron.php” – Pedir ao servidor que execute Os trabalhos em segundo plano;
- “> /dev/null 2>&1” – Destruir o resultado “output” gerado pelo servidor.
Conclusão
Configurando o CRON do Linux para executar os trabalhos em segundo plano do WordPress tem algumas vantagens. Não consigo de momento perceber nenhuma desvantagem no entanto é possível que exista dependendo do projeto.
No entanto as vantagens são algumas:
- Correr trabalhos sem tempo para terminar, permitindo executar tarefas demoradas;
- Não sub carrega o serviço web se for configurado o modo php-cli;
- As tarefas são executadas em períodos de tempo mais precisos.
Espero que tenha conseguido expressar a minha visão sobre o WordPress CRON. Não quer dizer que seja mais correta o mais errada do que a visão de outros é apenas a minha.
Estou aberto a todo o tipo de discussão sobre este tema, comentem!