O segredo de um administrador de sistemas para manter-se no controle, é automatizar o maior número possível de tarefas. Nesse post, vou falar sobre agendamento de tarefas utilizando o cron.
O cron, é utilizado para agendar tarefas que são executadas em horários específicos. Exemplos de coisas que podemos agendar através do cron são: desligar o sistema, fazer um backup, mandar mensagens no sistema e etc.
O daemon do cron reside dentro de /etc/init.d e é iniciado durante o boot do sistema; um arquivo do cron, ou seja, um arquivo com tarefas a serem executadas, é chamado de crontab, uma abreviatura para cron table. As crontabs podem ser armazenadas em 3 locais: /var/spool/cron/crontabs/ (isso no Debian!), /etc/cron.d e /etc/crontab.
Uma coisa que importante a ser lembrada, é que não é o cron que executa as tarefas! Ele apenas chama as instruções que estão dentro do arquivo crontab e o shell executa!
Seria assim:
cron (serviço) => crontab (arquivo de configuração) => shell (executa as instruções que estão no arquivo de configuração)
Um arquivo crontab tem a seguinte estrutura:
![]()
Acima, os valores da tabela, podem ser separados por espaços ou pela tecla <TAB>. E, falando em valores, temos:

Conhecendo a estrutura do cron, podemos começar a agendar tarefas. Todo usuário no sistema, pode agendar tarefas, que irão ficar armazenadas dentro de /var/spool/cron/crontabs/. Isso quer dizer que, se o usuário neo agendou uma tarefa no crontab, dentro desse diretório, vai existir um arquivo com o nome do neo. Se o root também agendar tarefas, também irá conter um arquivo com o nome do usuário root.
O comando para agendar tarefas, é o crontab:
# crontab -e
O comando acima, irá chamar o crontab no editor de textos padrão. No meu caso, meu editor é o vim, então, quando executo o comando acima, abre o vim. Para saber o seu editor de textos padrão, execute:
# echo $EDITOR
Onde o comando acima irá mostrar o conteúdo da variável EDITOR. Lembrando que, se nenhuma variável para EDITOR estiver definida, será chamado o editor de textos em /usr/bin/editor.
Na primeira vez em que editarmos o crontab, o arquivo estará vazio, pois é a primeira vez que vamos adicionar uma tarefa. Nas próximas vezes, ao editar esse arquivo, basta adicionar uma nova linha para a tarefa que vamos agendar.
Como nossa primeira tarefa no cron, vamos pedir para exibir uma mensagem no terminal. A linha a ser incluída no crontab fica assim:
0 18 11 6 4 echo “Hoje é $(date) > /dev/tty1”
Feito isso, podemos salvar o arquivo e sair; lembrando que, como estamos usando o vi, temos que teclar :wq para sair
!
No comando acima, estamos dizendo que, no dia 11/06, quinta-feira as 18:00 será exibida no terminal a mensagem “Hoje é Thu Jun 11 18:00:01 BRT 2009”.
Um ponto a ser observado, é que o cron é bem detalhista! O que quero dizer é que, no exemplo acima, o comando só será executado se for 18 horas E for dia 11 E for o mês 6 E for quinta-feira. Caso não atenda a essa especificação, o comando não será executado!
Então, nossa mensagem só será exibida novamente no computador daqi a seis anos, quando de novo, for 11/06, quinta-feira e for 18 horas!
Vamos ver mais um exemplo. No post sobre empacotadores, falei sobre como criar backup. Legal, mas se parar pra pensar, um backup não é funcional se eu não lembrar de fazê-lo – o que invariavelmente acontece
.
Então, para não ter problema, nada melhor do que colocar o cron para lembrar de fazer essa tarefa! Imaginem que quero fazer backup do meu home toda sexta às 18 horas. A linha a ser incluída no crontab, ficaria assim:
0 18 * * 5 tar cvzf \
/root/backup/home_nix_$(date +’%Y%m%d’).tgz /home/nix
O que fizemos agora, foi agendar no cron, para que toda sexta, às 18 horas, seja feito o backup do meu home com o tar e o gzip; e para ficar uma coisa mais organizada, pedi para guardar com a data.
Eu coloquei uma barra invertida (\) para quebrar o comando em duas linhas e facilitar a visualização no blog. A barra invertida faz com que o shell não interprete o caractere seguinte, que seria a quebra de linha, e permite quebrar o comando em duas linhas, sem causar erro. Se tirar a barra, tudo ficará em uma única linha.
Nessa linha de comando acima, tem uma coisa diferente… eu usei * (asteriscos) para definir uma tarefa. Esses asteriscos, são chamados de coringa… e eles indicam tudo, isto é… o comando será executado as 18 horas, todos os dias do mês, em todos os meses sempre às sextas.
Nesse post, vou ficar por aqui… No próximo, vou falar sobre os coringas que podemos usar para configurar o cron, e aproveitá-lo da melhor forma possível!
Até lá!