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

  1. No painel de controlo do seu alojamento, adicione um cronjob do tipo comando, para ser executado a cada minuto.
  2. 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).
    • --all executa 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.
  3. Adicione > /dev/null 2>&1 no final se não quiser que o serviço cron lhe envie por email o resultado de cada execução.
  4. 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.