Gostaria de ajudar?

quinta-feira, 7 de junho de 2012

Utilizando o Cron (Crontab)

O "cron" é um software do sistema Unix (linux) que é responsável por efetuar tarefas agendadas pelo usuário, este sistema vem instalado em todas as distribuições Linux e é ativado logo no boot do sistema. Sua utilização é apropriada para quem deseja que alguma atividade/tarefa seja executada automaticamente pelo sistema no minuto/hora/dia/dia da semana/mês desejado pelo usuário. Você poderá por exemplo agendar a limpeza dos arquivos temporários para toda segunda feira, por exemplo, o o "cron" faz uma verificação a cada minuto para identificar alguma tarefa agendada e desta forma ele executa tal tarefa sempre no período determinado.

Para usar o "cron" você pode usar editores como vi, vim ou simplesmente digitar no terminal crontab -e e editar como se estivesse no vi, por exemplo. O crontab tem a seguinte estrutura de execução:

MM HH DD mm SS US tarefa
  |      |    |      |     |    |      |
  |      |    |      |     |    |      |___tarefa
  |      |    |      |     |    |______usuário
  |      |    |      |     |_________dia da semana
  |      |    |      |____________mês
  |      |    |_______________dia do mês
  |      |__________________hora
  |______________________minuto

A sintaxe é a seguinte:

MM: digite aqui minuto (0-59);
HH: digite aqui hora (0-23);
DD: digite aqui dia do mês (0-31);
mm: digite aqui mês (1-12);
SS: digite aqui dia da semana (0-7) vê Obs 1;
US: digite aqui o usuário responsável pela execução (não coloque nada caso o executor seja o usuário que esta criando a lista no crontab);
tarefa: digite aqui a tarefa a ser executada (script).

Obs 1: Em dia_da_Semana, 0 refere-se a domingo; e 6, ao sábado.
       No caso de dia da semana funciona também as três primeiras letras
       (em inglês) do dia da semana (SUN,MON,TUE,WED,THU,FRI,SAT)
Obs 2: Em qualquer posição pode-se usar o * (asterisco) quando não se
       importar com o campo em questão.
Obs 3: Pode-se utilizar intervalos nesses campos. O caracter para intervalo
       é o - (hifen).
Obs 4: Pode-se utilizar lista de valores nesses campos. O caracter para a
       lista é a , (vírgula).
Obs 5: Qualquer texto colocado após o programa que será executado será
       considerado comentário e não será interpretado pelo cron


Três comandos importantes de edição do crontab vocês precisam saber:

crontab -e usado para editar;
crontab -l usado para listar tarefas agendadas;
crontab -r usado para remover o arquivo ou lista existente no crontab.

Segue alguns exemplos de estrutura do crontab:

0       12      *       *       * /home/usuario/tarefa.sh

O exemplo acima significa que em qualquer mês, dia da semana, dia do mês sempre as 4 horas em ponto o programa tarefa.sh será executado.

Quando você quer que a tarefa seja executada sempre, por exemplo, todos os dias, você digita "*" no local reservado para que dia do mÊs e desta forma todos os dias do mês a tarefa será executada. Isto serve para todas as outras  condições.

Exemplo:

*          *          *          *           * /home/usuario/tarefa.sh

O exemplo acima significa que em qaulquer dia do mês ou da semana, qualquer mês, qualquer hora e minuto o programa tarefa.sh será executado, ou seja, a cada minuto que se passa o programa será executado.

Exemplo:

0       12      *       *       * /home/usuario/tarefa1.sh
0        4      15      *       * /home/usuario/tarefa2.sh 

Observe que no exemplo acima existem duas tarefas agendadas e é desta forma que tem que ser feito uma tarefa logo abaixo da outra, sendo que cada uma com sua configuração temporal especifica, obviamente que as duas tarefas poderiam ser executadas no mesmo momento.

Boa Sorte e Bom Trabalho a Todos!!

2 comentários :

  1. Olá amigo talvez possa me ajudar, estou com dificuldade de criar uma tarefa que seja executada a cada 1 minuto mas que não seja executada entre 12 e 14 horas. Agradeço a ajuda.

    ResponderExcluir
    Respostas
    1. Oi Everton,

      O problema é que o crontab foi criado para executar tarefas em sequência. Acredito que para gerar este intervalo de execução você precise criar um shell script para alterar os instantes de execução do cron, não sei talvez isso resolva.

      Abraço,
      Critiano

      Excluir