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.txt
Há 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.