LINUX, TI E MUITO MAIS!
Cadastre-se agora e receba gratuitamente o ebook do Curso Linux Ubuntu, dicas imperdíveis para ter sucesso com Linux
Insira seu email no campo ao lado para receber AGORA o Ebook!

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.

APRENDA A DOMINAR O LINUX

Aprenda a dominar o LINUX de uma vez por todos, pegue sua cópia

  • Ferramentas para instalar softwares adicionais
  • Shell do LINUX passo a passo, e muito mais...

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.

Leia também ...   6 Passos para criar um servidor de gateway de email com Postfix

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.

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 http://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 http://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 http://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

Leia também ...   10 Formas de Utilizar o Comando find do Sistema LINUX que você nunca imaginou que iria precisar saber

Artigos Relacionados

Sobre pedrodelfino

Trabalha com tecnologia da informação, usando Linux a mais de 13 anos. Autor do Ebook Curso Linux Ubuntu.

  • Ramon

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

    • pedrodelfino

      Valeu pelo comentário Ramon …

      Aguarde que teremos mais novidades…

  • 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);

  • Leonardo Christo

    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

  • Fabio Reche

    Obrigado Pedro 🙂

  • Leandro

    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?

Aula Online: Aprenda a Dominar o Linux De Uma Vez Por Todas

x

Aprenda a Dominar o Linux De Uma Vez Por Todas

Você vai aprender passo a passo como dominar o LINUX de uma vez por todas e descobrir os 4 pilares para ser um Profissional EXPERT.