Como agendar um script PHP usando Crontab no Linux

Como agendar um script PHP usando Crontab no Linux

Como agendar um script PHP no Linux ? Essa foi a pergunta que recebi e gostaria de apresentar algumas opções para os leitores do E-tinet.

Quando trabalhamos com Linux existem muitas opções para executar uma mesma função, e isso é o mais legal. Assim como eu descrevi no Ebook do Curso Linux Ubuntu onde temos muitas formas de instalar softwares por exemplo.

Em um resumo rápido, para agendar tarefas no Linux podemos utilizar o Cron.

agendar-script-php-crontab

O problema que temos hoje é:

Eu tenho um script php no meu servidor, que pode ser executado a partir da linha de comando e também pode ser acessado a partir do navegador usando o servidor web Apache. Eu gostaria de executar este script php a cada 1 hora. Como posso programar isso com Cron em ambiente Linux.

Então vamos ver alguns métodos para agendar o seu script php como crontab no linux.

# 1: Executar o script usando php a partir do crontab

Assim como você chama seu script no shell do Linux, pode usar o executável do PHP e chamar o script a partir do seu crontab.

Para executar “meu-script.php” a cada 1 hora faça o seguinte:

# crontab -e
00 * * * * /usr/local/bin/php /home/pedrodelfino/meu-script.php

#2: Executar o script php usando uma URL

Com a opção 01 ( acima) existe um problema, ela só poderá ser utilizada se você tem acesso ao shell do Linux, mas vamos imaginar que seu script em PHP está em um servidor onde você não tem acesso via shell,  somente ftp para salvar os arquivos.

Então veja essa opção:

Se o seu script  poderá ser acessado apenas pela URL podemos usar o curl, wget  ou o Lynx para configurar o crontab.

A configuração do crontab abaixo executa o script PHP (a cada hora), chamando ele através  da URL usando o navegador de modo texto Lynx.

Leia mais:  30 ferramentas para hackers que podem ser usadas no Kali Linux (PARTE 2)

O Lynx por padrão abre uma URL no modo interativo. Temos a opção -dump que faz o lynx executar e apenas mostrar a saída padrão.

00 * * * * lynx -dump https://e-tinet.com/meu-script.php

Claro que nesse exemplo, podemos usar qualquer computador com Linux para executar esse agendamento.

A configuração a seguir executa o script php (a cada 5 minutos), chamando a URL usando CURL. Usando a opção “curl -o”, você também irá direcionar a saída do seu script para um arquivo temporário, como mostrado abaixo

*/5 * * * * /usr/bin/curl -o temp.txt https://e-tinet.com/meu-script.php

Vamos ver um exemplo agora para executar o script PHP (a cada 10 minutos), chamando a URL usando o WGET. A opção -q indica o modo de execução, a opção  “-O temp.txt” indica que a saída será enviada para o arquivo temporário.

*/10 * * * * /usr/bin/wget -q -O temp.txt https://e-tinet.com/meu-script.php

Então se você tem uma aplicação escrita em PHP que necessita de agendamento o cron é a opção, usando a segunda forma mostrada aqui nesse artigo é mais vantajoso pois podemos usar qualquer computador com Linux para fazer o agendamento, já a primeira opção é mais indicada para quem tem acesso ao shell do servidor Web.

Uma dica importante, tome muito cuidado com agendamento de 5 em 5 minutos, dependendo do tempo de retorno do script isso poderá tornar o seu servidor lento, principalmente se está sendo agendado direto com o executável do PHP.

Então é isso, por hoje é só.

Pedro Delfino

Comments

  1. Tenho acompanhado suas inteligentes publicações, e esta não foi diferente…mais uma vez parabéns!

  2. O acesso a uma tarefa de back-end (cron) através de uma url tem algumas implicações, como gateway timeout, user abort e timeout exceeded.
    Então sempre é bom fazer chamada a funções no php como:
    ignore_user_abort(false);
    set_time_limit(0);

  3. Leonardo Christo diz

    Opa, comecei a acompanhar suas publicações e duas já me ajudaram bastante. Muito obrigado por compartilhar seus conhecimentos.

    Gostaria de te pedir uma ajuda com ralação a eventos via crontab.

    Tenho uma linha de comando que executa um agendamento ed eventos de uma agenda, ou seja, a cada tempo determinado pelo usuario no evento da agenda essa linha de comando chama um evento que envia um e-mail para o usuario avisando que ja está na hora (alarmes de agenda).

    a linha de comando é essa: */5 * * * * su apache -c ‘/usr/bin/php /xxxx/tine20.php –method Tinebase.triggerAsyncEvents –username=xxxxxx’.

    Se eu chamar na cron ele não funciona, mas se eu chamar o scripr manualmente ele funciona, ser á que poderia clarear minha ideia?

    obrigado

  4. Fabio Reche diz

    Obrigado Pedro 🙂

  5. Olá, Eu tenho uma dúvida. Vou usar um script PHP para disparar alguns emails na minha aplicação, mas esses emails são agendados pelos usuários, pode ser que o tenha mais de um agendamento no mesmo horário. Imagina se a primeira ação começa e demora um pouco para terminar e já tem outra no horário para começar? Uma ação cancela outra ação de requisição?

    Ou seria melhor criar uma CRON para cada usuário como se fosse requisições diferentes?

Speak Your Mind

*