Além do Agendador Preguiçoso e do Agendador Web Cron descritos em Como Escolher um Agendador, o Joomla pode executar as suas tarefas agendadas a partir da linha de comandos. Um cronjob no servidor executa a própria aplicação de consola do Joomla, cli/joomla.php, com o comando scheduler:run. Não está envolvido nenhum navegador, visitante ou pedido web.
Para tarefas demoradas, esta é a melhor opção quando o seu alojamento permite adicionar cronjobs que executam um comando, e não apenas cronjobs que chamam um URL:
- Sem limites de tempo web. Uma tarefa é executada durante o tempo que for necessário. Através da web, o servidor web ou o alojamento pode interromper um pedido após um minuto ou dois, o que encurta tarefas longas.
- Tempo preciso, tal como o Web Cron, com precisão de um minuto quando o cronjob é executado a cada minuto.
- Nenhuma hiperligação a manter secreta. Nada tem de estar acessível a partir do exterior do servidor.
Não existe nada para ativar nas opções de Tarefas Agendadas: o comando está sempre disponível.
É um pouco mais trabalhoso de configurar, o que contraria mais ou menos o objetivo do Agendador de Tarefas do Joomla: tornar as tarefas agendadas facilmente geríveis no Administrador. Guarde isto na manga como um truque para executar tarefas demoradas.
Configurar o cronjob
- No painel de controlo do seu alojamento, adicione um cronjob do tipo comando, para ser executado a cada minuto.
- Utilize este comando, com o caminho para o PHP e para o seu sítio no seu servidor:
/usr/bin/php /home/example/public_html/cli/joomla.php scheduler:run --all- O seu alojamento indica-lhe o caminho para o PHP. Tem de ser uma versão do PHP suportada pela sua versão do Joomla (PHP 8.3 ou posterior para o Joomla 6).
--allexecuta todas as tarefas pendentes. Sem este parâmetro, cada execução inicia apenas a próxima tarefa pendente, pelo que as tarefas ficam à espera umas das outras.
- Adicione
> /dev/null 2>&1no final se não quiser que o serviço cron lhe envie por email o resultado de cada execução. - Em Sistema > Tarefas Agendadas > Opções, desative o Agendador Preguiçoso e o Web Cron, para que apenas um agendador inicie as suas tarefas.
Verifique se funciona
Execute o comando uma vez você mesmo, se o seu alojamento oferecer um terminal (SSH):
php cli/joomla.php scheduler:run --all
O Joomla apresenta a lista de cada tarefa que executou e termina com Finished running N tasks. Em Sistema > Tarefas Agendadas, a coluna Data da última execução mostra quando cada tarefa foi executada pela última vez.
Comandos úteis
| Comando | O que faz |
|---|---|
php cli/joomla.php scheduler:list |
Apresenta a lista das tarefas com o seu ID, situação e próxima execução. |
php cli/joomla.php scheduler:run --id=5 |
Executa de imediato a tarefa autorizada com o ID 5, esteja ou não pendente. |
php cli/joomla.php scheduler:run --all |
Executa todas as tarefas pendentes. |
php cli/joomla.php scheduler:state |
Autoriza, desativa ou envia uma tarefa para a reciclagem. |
Todos os comandos do Joomla estão descritos em Utilizar a CLI.
Bom saber
A partir da linha de comandos, o Joomla executa uma tarefa pendente mesmo enquanto outra tarefa ainda está em execução. Pode até iniciar uma tarefa que ainda está em execução num processo anterior: scheduler:run não verifica se uma tarefa está bloqueada. Quando uma tarefa demora mais tempo do que o intervalo do seu cronjob, certifique-se de que duas execuções em simultâneo não causam problemas, ou execute essa tarefa com menos frequência. O Web Cron e o Agendador Preguiçoso não iniciam nenhuma tarefa enquanto outra tarefa estiver em execução.