Agendando tarefas em Linux/Unix usando o cron

Este artigo fala um pouco sobre o cron, uma ferramenta para agendamento de tarefas. O cron é uma ótimo daemon para fazer backup automáticos, agendamento de tarefas diárias, economizando tempo e trabalho repetitivos.

[ Hits: 157.067 ]

Por: Ricardo Souza Silveira em 27/03/2008


Cron - Resumo e introdução



Resumo: Este artigo trás informações sobre o comando cron. Alguns comandos e parâmetros que poderão ser utilizados também estarão citados neste artigo, assim como alguns exemplos de como poderá ser utilizado.

Abstract: This article back information on the command cron. Some command and parameters that could be used also will be cited in this article as well as some examples of how it may be used.

Introdução

O cron é uma ferramenta de sistemas Linux e Unix que permite a execução de comandos ou programas, agendados para um determinado dia/mês/ano/hora.

Para demonstrar melhor a utilidade de comando cron no Linux, suponhamos que por questões de segurança você precisa fazer um backup de alguns arquivos de uma aplicação, que é acessada por clientes diariamente. Neste caso você poderá utilizar o cron para fazer esse backup automaticamente em horários programados.

Como utilizar o cron

O agendamento das tarefas é feita através do arquivo de configuração localizado no diretório /etc/crontab ou em arquivos de usuários localizados em /var/spool/cron/crontabs/[nome do usuário].

Para adicionar uma tarefa ao cron é preciso que você abra com um editor de texto qualquer (se estiver usando interface gráfica Gnome, e se tiver instalado, poderá utilizar o gedit, ou se e estiver em moda caracter o vim ,vim, nano, pipe como preferir) o arquivo /etc/crontab e agendar, definindo o mês/dia/hora em que o comando devera ser executado. Para que a ferramenta cron funcione não é necessário reiniciá-la.

Para que o agendamento funcione é necessário que siga um padrão, um formato ao qual deve se respeitar. Veja o exemplo abaixo:

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]

31 18 1 * * root run-parts --report /etc/cron.montly
|    |   | |  |    |    |
|    |   | |  |    |     \_Comando que será executado
|    |   | |  |    |
|    |   | |  |     \_ UID que executará o comando
|    |   | |  |
|    |   | |  \_ Dia da semana (0-7)
|    |   | |
|    |   |  \_ Mês (1-12)
|    |   |
|    |    \_ Dia do Mês (1-31)
|    |
|     \_ Hora
|
\_ Minuto

Onde corresponde:



Outras considerações

Na opção que corresponde ao dia da semana pode ser utilizado as 3 primeiras letras em inglês (SUN,MON,TUE,WED,THU,FRI,SAT).

Você pode executar tarefas de hora em hora, diariamente, semanalmente e mensalmente, simplesmente colocando seus arquivos dento dos diretório respectivos /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /cron.monthly.

Veja um exemplo: dentro de "/etc/cron.daily/" tenho um arquivo backup, onde tenho o script de backup do meu sistema, ou seja, no meu caso ele ira fazer backup todos os dias as 12:20. Obs.: é necessário que esse arquivo tenha permissão para execução, e para isso basta executar o comando: "chmod +x /etc/cron.daily/backup".

Os campos que não for se importar, pode ser colocado um "*", como se tivesse selecionado "todas as possibilidades", sendo que podem ser colocado "-" (hífen) para determinar os intervalos de execução. A "," (vírgula) define uma lista valores, lista de opções com os números (1,3,5).

O arquivo que é gerado pelo cron em no diretório do usuário '/var/spool/cron/crontabs/[usuário]' pelo crontab tem o mesmo formato do /etc/crontab, exceto por não possuir o campo 'usuário (UID)', pois o nome do arquivo já identifica o usuário no sistema.

Caso você queira editar um arquivo de usuário feito pelo cron, basta utilizar o comando "crontab -e", ele irá abrir o que foi agendado para aquele usuário.

Cuidado, caso você edite o "crontab", certifique-se para que haja uma linha em branco no final do arquivo, caso esta linha não exista o ultimo comando não se executará. E tenha multa atenção ao colocar qualquer texto após o programa que será executado será considerado comentário e não será interpretado pelo cron.

    Próxima página

Páginas do artigo
   1. Cron - Resumo e introdução
   2. Alguns exemplos de comandos
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Autenticando e protegendo diretórios no Apache

Instalando Apache2, PHP4 e MySQL

O que fazer após instalar Linux Mint 15 (sim, há o que fazer!)

Deixando aplicativos do Wine com a aparência melhor

DNS no Slackware

  
Comentários
[1] Comentário enviado por foxl em 28/03/2008 - 11:50h

poo bacana gostei

pelo cron tu pode fazer backup de hda para hdb por exemplo?

[2] Comentário enviado por rikrdosilveira em 29/03/2008 - 21:54h

foxl, respondendo sua pergunta, o cron é um agendador de tarefas, portando se vc agendar os comando para fazer backup, ele certamente o executará, dependendo é claro das permissões do usuario...

[3] Comentário enviado por removido em 30/03/2008 - 00:13h

cron apenas é um agendador..

utiliza-se o cron para que faça processos automaticos por exemplo.

se voce precisa que todo dia atualize seu apt ou ports, ao invés de você ter que ficar digitando, você adiciona a cron e pronto, o sistema fará isso automaticamente da forma que você especificou.

forte abraços

Deus te abençõe!

Thiago

[4] Comentário enviado por maran em 30/03/2008 - 15:11h

é otimo combinado com estratégias...
tava fazendo u martigo sobre isto, agora decha pra la ne hushuhusahusahusa

belo artigo

Te Mais...

[5] Comentário enviado por elfou em 31/03/2008 - 11:01h

Muuuito bom esse programa, bem melhor que um BAT da vida. Valeu ai cara.

[6] Comentário enviado por elgio em 01/04/2008 - 10:56h

Teu artigo está muito bem fundamentado e correto.

Só tome cuidado com teus exemplos, pois pequenos descuidos neles podem levar o leitor ao erro.

Como exemplo:
"
Para rodar ao meio-dia e a meia-noite de terça a sábado:

00 00, 12 * * 2-6 script
"
Como tu pos um espaco entre o 00 e a virgula, fizeste uma separacao de campo gerando erro!

Ainda, isto só funcionaria via crontab e não no /etc/crontab, pois no formato /etc/crontab TU PRECISA informar o user que irá executar (não consta no teu exemplo) e via utilitário crontab NÃO, pois valerá o usuário que o executou.

Muitos ainda se atrapalham com a forma do cron. Isto, por exemplo:
* 20 * * * root algo.sh

NÃO IRÁ EXECUTAR as 20h como ingenuamente alguém pode pensar, mas sim em TODOS OS MINUTOS de 20h, ou seja, vai executar as 20:00, novamente as 20:01, 20:02 ... 20:59. Irá executar 60 vezes. MUITO CUIDADO. Já vi muita gente causar estrago com isto. Se é para executar uma vez a cada hora, tu precisa dizer em qual minuto!

Vale dizer ainda que permitir que usuários usem cron ou at pode ser um sério RISCO a segurança. Um usuário mal intencionado pode agendar tarefas futuras, as chamadas bombas relógios.

Os arquivos /etc/cron.allow e /etc/cron.deny regulam quem pode e quem não pode usar o cront (via crontab)

[7] Comentário enviado por Fernando Dantas em 01/07/2009 - 09:38h

Obrigado seu comentário já me ajudou muito, porem estou com uma duvida. Tenho um servidor e gostaria de agendar (cron) o ajuste constante do horário do sistema com o da BIOS (todos os dias, meses).
O comando a ser realizado seria esse.
00 00 * * * root run -hwclock –hctosys

Agradeço a atenção.

Abraços.

[8] Comentário enviado por luiz cambuca em 22/07/2009 - 21:41h

Estou fazendo um trabalho sobre backups, escrevi pequenos scripts e inseri-os no crontab, funcionaram bem no localhost, porém não estão funcionado remotamente, o estranho é que, se eu executar os comandos diretamente no console, funciona ok, mas no cron não.
Usei duas ferramentas, rsync e scp, funcionaram perfeitamente no console como root, porém no cron, mesmo indicando para usar como root, não executam, existe alguma limitação como relação a backups remotos?
Se alguém puder me responder ficarei grato.

[9] Comentário enviado por removido em 15/04/2010 - 22:31h

Muito bom, comecei a mexer com o crontab agora e seu artigo foi muito útil.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts