O crontab permite que você execute comandos em um intervalo regular de tempo com o bônus adicioal de que você não precisa estar logado para que isto aconteça. O crontab irá enviar para você, por e-mail, a saída do comando. Você pode especificar os intervalos em minutos, horas, dias e até meses. Dependendo das opções, o crontab irá agir de maneira diferente:
Vamos começar editando um arquivo crontab. Se você digitar crontab -e, o editor de sua preferência será aberto, caso você tenha configurado as variáveis de ambiente EDITOR ou VISUAL, senão o Vi será o editor utilizado. Uma linha no arquivo crontab é feita de seis campos. Os primeiros cinco campos são os intervalos de tempo para minutos, horas, dias do mês, mês e dias da semana. O sexto campo é o comando a ser executado. Linhas que começam com um # são consideradas comentários e serão ignoradas pelo crond (o programa que é responsável por executar os arquivos crontab). Este formato é um pouco diferente para o sistema crontab, em /etc/crontab. Lá, o sexto campo é o nome do usuário que deveria ser utilizado para iniciar o programa no sétimo campo. Ele deveria ser utilizado somente para tarefas administrativas, e para processos em execução de usuários que existem somente para aumentar a segurança do sistema (como o suário de um anti-vírus ou um usuário criado para executar um servidor de banco de dados). Aqui está um exemplo do crontab:
# Se você não deseja receber e-mail,
# comente a seguinte linha
#MAILTO="seu_endereço_de_e-mail"
#
# Avise a cada 2 dias sobre novas imagens,
# como no exemplo acima - e depois disto, "crie novamente"
# o arquivo de "data". O "%" é tratado como uma nova
# linha, o que lhe possibilita colocar vários comandos
# em uma mesma linha.
0 14 */2 * * find /shared/images \
-cnewer /shared/images/stamp \
-a -iregex ".*\.jpe?g" \
-a -not -regex \
".*/old/.*"%touch /shared/images/stamp
#
# Todo Natal toque uma melodia :)
0 0 25 12 * mpg123 $HOME/sounds/merryxmas.mp3
#
# Toda terça-feira às 17h, exiba a lista de compras...
0 17 * * 2 lpr $HOME/shopping-list.txtHá várias outras maneiras de especificar intervalos diferentes das apresentadas neste exemplo. Você pode especificar um conjunto de valores discretos separados por vírgulas (1,14,23) ou um intervalo (1-15), ou até combinar as duas formas (1-10,12-20), opcionalmente com um valor de step, que pulará a seqüência com o valor indicado (1-12,20-27/2).
Pode ser que você queira agendar um comando para um determinado dia, mas sem uma certa freqüência, como ser lembrado de um compromisso às 18:00 horas de oje. Você executa o X, o pacote X11R6-contrib é instalado e então você é avisado às 17:30 que você precisa ir. Para isso, o at é exatamente o que você preisa:
$ at 5:30pm # You're now in front of the "at" prompt at> xmessage "Hora de ir! Compromisso às 18:00 horas" # Type CTRL-d to exit at> <EOT> job 1 at 2005-02-23 17:30 $
Você pode especificar o tempo de outras formas:
now +
<intervalo>: significa o intervalo indicado a partir do momento em que o comando foi executado. A sintaxe para o intervalo é <n>
(minutes|hours|days|weeks|months). Por exemplo, você pode especificar now + 1 hour (uma hora a partir de agora), now + 3 days (três dias a partir de agora) e assim por diante.
<horário>
<dia>: especifica a data de maneira completa. O parâmetro <horário> é obrigatório. O at aceita o parâmtero de diversas maneiras: você pode digitar 0100, 04:20,
2am, 0530pm,
1800, ou um dos três valores especiais: noon (meio-dia), teatime (hora do chá - 16:00 hrs) ou midnight (meia-noite). O parâmetro <dia> é opcional. Você pode indicá-lo de várias formas: a norte-americana, por exemplo, onde 12/20/2001 apontaria para o dia 20 de dezembro de 2001, ou a forma européia, mais parecida com a nossa, 20.12.2001. Você pode omitir o ano, mas somente na forma européia: 20.12. Você também pode especificar o mês com a abreviação em inglês dos meses: tanto Dec 20 como 20 Dec são validos.
O at também aceita algumas opções diferentes:
Como sempre, veja a página do manual do comando at(1) para mais informações.