Jump to content
Rubemlrm

[Linux] Crontab

Recommended Posts

Rubemlrm

Certamente muitos de vós já se depararam com estes 2 termos e questionaram-se sobre o que seriam e que função desempenhavam. Ambos são processos que são exclusivos de sistemas UNIX ou seja linux e openbsd entre outros.

O crontab serve de arquivo para as tarefas que queremos que sejam automatizadas como por exemplo: fazer backups, apagar ficheiros, corrigir erros do sistema, actualizar o sistema, entre outras coisas. Enquanto que o Cron vai utilizar esse arquivo e vai verificar de x em x tempo se a tarefa já foi executada ou ainda está a ser executada e verifica também há quanto tempo foi executada. Caso ainda não tenha sido executada, o cron irá executar essa tarefa de forma autónoma e irá ter o nome de cronjob. De referir que é tudo executado na shell do sistema (terminal).

Dito assim pode parecer muito confuso mas tentarei elucidar-vos melhor sobre isto com um caso concreto. Imaginem que querem que um script seja executado de meia em meia hora, script esse que irá fazer backup de uma pasta que vocês queiram. Para tal tem-se que "dizer" ao cron que de X em X tempo o script em questão tem que ser executado e o cron pega nessa informação e guarda-a num ficheiro crontab e a partir desse momento, o cron irá verificar de X em X tempo se o script está a ser executado ou não. Senão estiver irá executá-lo, caso esteja já a ser executado o cron não vai fazer nada além de continuar a "vigiar" essa tarefa para o caso de alguma anomalia a afectar e então o cron volta a executá-la.

Existem 2 formas de o cron actuar:

  • Global;
  • Local.

No caso da global é o root do sistema que define na crontab o que tem se verificar e fazer. E aplica-se a todos os utilizadores.

Enquanto que na local o cron apenas irá actuar na conta do utilizador que o criou. Para configurar um crontab para um utilizador usa-se a seguinte sintaxe:

-l utilizador -- lista as tarefas agendadas para utilizador
-e utilizador -- Edita o crontab
-r utilizador -- apaga o crontab do utilizador
-c directoria  -- especifica um directoria para o Crontab

Para verificar todos os crontabs de um utilizador basta ver esta directoria:

/var/spool/cron/utilizador

E para editar os crontabs globais basta editar este ficheiro /etc/crontab.

Agora que falamos do que é cada coisa vou passar a explicar a sintaxe de um crontab. A sintaxe dos crontabs é divida em 6 partes:

  • Minuto: que tem valores entre 0 e 59;
  • Hora : que tem valores entre 0 e 23;
  • Dia : 1-31;
  • Mês : 1-12;
  • Dia da Semana : 0-7/Sun-Sat , o 0 e o 7 representam o domingo;
  • Comando a ser executado.

Por exemplo, se quisermos que um determinado script seja executado todos os dias às 16 horas basta fazer isto:

0  16  *  *  *  /home/dev/backup.py

Pode-se complementar isto usando os caracteres especiais que permitem definir mais condições no que é para ser feito:

  • Asterisco (*): com este carácter indicamos que serão seleccionados todos os valores do campo em que foi usado, ou seja, se usarmos o <strong>* no campo horas significa que o cron vai ser executado em todas as horas;
  • Barra (/): com este carácter indicamos que o cron será executado consoante o que é definido pela sintaxe: /.., por exemplo se especificar isto no campo horas 59/2 significa que o cron vai ser executado duas vezes por cada hora;
  • Virgula (,): com este carácter separamos vários items da lista, como por exemplo: "1,2,3" neste caso estamos a definir os meses Janeiro, Fevereiro, Março;
  • Hífen (-): Com este carácter definimos uma range de valores, por exemplo: 15-23, neste caso definimos todas as horas entre as 15 horas e as 23 horas;
  • Ponto de interrogação (?): com este carácter podemos omitir a especificação do dia do mês e do dia da semana. Atenção que só pode ser utilizado num dos campos;
  • L: o L tem como função identificar que o cron só executado no último valor do campo especificado, no caso dos dias será no valor 7 (Domingo);
  • W: o W só é utilizado no campo "dia da semana" ao seja se indicarmos o valor "w28" o cron só irá ser executado no dia da semana mais perto do valor do dia do mês. Atenção Sábado e Domingo não são considerados dias úteis (dias da semana);
  • cardinal (#): este carácter só pode ser utilizado no campo dia da semana e tem que ser procedido por um número que vai indicar o dia da semana em que vai ser executado, se tivermos isto: #4 indica que vai executado na segunda quinta-feira de cada mês.

Share this post


Link to post
Share on other sites
softklin

Rubemlrm, obrigado pelo tutorial, e pelo menos a nível linguístico, parece-me bastante bom.

Agora, o que te propunha era criares o artigo na nossa wiki:

http://wiki.portugal-a-programar.pt/

que é um sítio dedicado a tutoriais (esta secção já tem algum tempo, e penso eu que estava em processo de migração). Se não tiveres tempo, ou não souberes a sintaxe da wiki, posso eu criar o artigo, com os devidos créditos. Isto, claro, com a tua autorização.

Cumps.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
thoga31

Se não tiveres tempo, ou não souberes a sintaxe da wiki, posso eu criar o artigo, com os devidos créditos. Isto, claro, com a tua autorização.

A partir do momento em que um utilizador coloca aqui um tutorial, fica em público: estar aqui ou na Wiki vai dar ao mesmo. Por isso, ao estar aqui, a autorização dele está dada. ;)

Este quadro, na realidade, está planeado ser abolido assim que a Wiki Team colocar os melhores na Wiki, o que eu já fiz a metade destes subquadros. :thumbsup:


EDIT: Disponível na wiki aqui.


Knowledge is free!

Share this post


Link to post
Share on other sites
Rubemlrm

A partir do momento em que um utilizador coloca aqui um tutorial, fica em público: estar aqui ou na Wiki vai dar ao mesmo. Por isso, ao estar aqui, a autorização dele está dada. ;)

Este quadro, na realidade, está planeado ser abolido assim que a Wiki Team colocar os melhores na Wiki, o que eu já fiz a metade destes subquadros. :thumbsup:


EDIT: Disponível na wiki aqui.

Antes demais obrigado por colocarem o meu tutorial na wiki =). Uma questão qualquer tutorial a partir de agora é para ir diretamente para a wiki ? É que tenho mais uns 2 para por entretanto.

Share this post


Link to post
Share on other sites
brunoais

Antes demais obrigado por colocarem o meu tutorial na wiki =). Uma questão qualquer tutorial a partir de agora é para ir diretamente para a wiki ? É que tenho mais uns 2 para por entretanto.

Envia direitinho para a wiki. É o melhor local para meter este tipo de coisas para q todos possam contribuir e melhorar, qd necessário


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
thoga31

Antes demais obrigado por colocarem o meu tutorial na wiki =). Uma questão qualquer tutorial a partir de agora é para ir diretamente para a wiki ? É que tenho mais uns 2 para por entretanto.

Envia direitinho para a wiki. É o melhor local para meter este tipo de coisas para q todos possam contribuir e melhorar, qd necessário

brunoais, vou só completar o que disseste. B)

Rubemlrm, a intenção é acabar definitivamente com este quadro. Por isso, novos tutoriais é para fazer logo na Wiki, que tem a vantagem de poderem criar pouco a pouco, metendo uma nota inicial, do tipo Importante ou Crítico, a dizer algo como "Documento a ser escrito, por favor não edites." :happybday:

Se não sabes como criar documentos, consulta o nosso FAQ da Wiki. Indicações de formatação estão na namespace "wiki", de igual forma. :)


Knowledge is free!

Share this post


Link to post
Share on other sites
Rubemlrm

Sendo assim ver se começo a "converter" os tutorias que fiz para o meu blog para o wiki. Thoga já tenho alguma experiencia em wikis, fiz parte de uma wiki tuga de android =)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.