Agendar tarefas no GNU/Linux

8 de fev de 2015 - Paulo Dias


Nesse artigo quero mostrar como agendar tarefas no GNU/Linux... Para realizar os exemplos estou utilizando o Ubuntu 12.04.

No GNU/Linux existem duas alternativas para criar agendamentos de tarefas. O at, que é indicado quando a tarefa agendada deve ser executada uma única vez e o cron, que é utilizado quando a tarefa deve ser executada regularmente (de tempos em tempos).

At

A sintaxe para utilizar o comando at é a seguinte: at horário caminho_completo_comando

Na posição do horário é possível utilizar vários tipos de formatos. No arquivo /usr/share/doc/at/timespec existe uma lista com todos os formatos.

Veja um exemplo de como agendar uma tarefa no at para hoje às 20 horas:

 
at 8pm
 

Nesse momento será aberto um novo shell onde o comando deve ser digitado. No meu Ubuntu esse shell possui a seguinte aparência:

 
at 8pm 
warning: commands will be executed using /bin/sh
at>
 

Após terminar de digitar o comando, utilize o atalho ctrl + d para salvar o agendamento. Esse atalho indica o final de arquivo( EOF ), ou seja, o at entende que o comando foi digitado e deve ser salvo(agendado).

Com isso, o comando foi agendado... Para visualizar a lista de comandos agendados com o at é usado o comando atq ou at -l. Veja um exemplo da saída desse comando:

atq
9 Mon Feb  8 20:00:00 2015 a paulo

Apesar de listar as tarefas agendadas com o horário de execução, através desse comando não é possível verificar quais os comandos serão executados em cada tarefa. Para tanto, é possível visualizar os detalhes de cada tarefa com o seguinte comando:

at -c 9

Onde o número 9 é o id da tarefa. O id é o primeiro número que aparece para cada tarefa listada pelo atq.

Já para remover um comando previamente agendado, é utilizado o comando atrm. A sintaxe desse comando é a seguinte: atrm id

Veja um exemplo onde a tarefa agendada para às 20 horas é removida:

atrm 9

Para definir quais usuários podem ou não executar tarefas no at existem 2 arquivos de controle, são eles: /etc/at.allow e /etc/at.deny

Se o arquivo /etc/at.allow não existir, o arquivo /etc/at.deny será verificado... Se nenhum dos 2 arquivos existirem, apenas o usuário root poderá criar tarefas agendadas.

Cron

Para agendar tarefas no cron é utilizado o comando: crontab -e

O comando crontab -e abre um arquivo (tabela) onde deve ser digitado o comando que vai ser agendado. Essa tabela possui a seguinte aparência no meu sistema:

...
# m h  dom mon dow   command

Nessa tabela temos 6 campos, da direita para esquerda são: Minuto, hora, dia do mês, mês, dia da semana e comando.

Veja um exemplo de como agendar uma tarefa que vai ser executada todos os dias às 20 horas:

# m h  dom mon dow   command

0 20 * * * echo 'paulo' > /dev/pts/0

Nessa tabela é possível utilizar alguns caracteres especiais, por exemplo, o * indica que para essa coluna o comando deve ser executado em todos os casos... Além desse, é possível utilizar os seguintes caracteres:

  • ( , ) Para indicar mais de um valor, por exemplo, no mês 5 e 6 é igual a 5,6
  • ( - ) Para indicar um intervalo, por exemplo, do dia 10 até o dia 20 é igual a 10-20
  • ( / ) Para indicar um passo(incremento), por exemplo, executar a cada 5 minutos é igual a */5

Veja um exemplo onde uma tarefa é agendada para executar nos dias 3, 6, 7 e 8, iniciando às 20h e que seja repetida a cada 2 minutos até às 21h:

# m h  dom mon dow   command

*/2 20 3,6-8 * * echo 'paulo' > /dev/pts/0

Da mesma forma que acontece com o at, existem 2 arquivos para controlar quem pode agendar tarefas no cron, são eles: /etc/cron.allow e /etc/cron.deny. Porém, se nenhum dos 2 existir, diferente do que acontece com o at, todos os usuários poderão agendar tarefas no cron.

Além de escrever comandos diretamente na tabela cron, também é possível agendar tarefas usando as seguintes pastas: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly.

Para agendar uma tarefa, basta criar um shell script e move-lo para a pasta correspondente... O script será executado conforme a pasta. De hora em hora(cron.hourly). Diariamente(cron.daily). Semanalmente(cron.weekly). Mensalmente(cron.monthly)

Bom pessoal, obviamente, esse artigo não mostra todas as possibilidades desses comandos, mas vou encerrar por aqui... Quem tiver interesse em saber mais pode verificar os links a seguir e ler o manual de cada comando através do comando man, veja um exemplo: man at

http://www.dltec.com.br/blog/linux/agendando-tarefas-com-o-comando-at-no-linux/ http://www.vivaolinux.com.br/artigo/Usando-cron-e-crontab-para-agendar-tarefas

Paulo Dias

Graduado no curso tecnólogo em análise e desenvolvimento de sistemas. Defensor do Software Livre e da democratização da informação. Possui as certificações Linux LPIC-1 e Java OCA. Atualmente exerce a função de coordenador técnico na área de telecomunicações.

Siga-me no Twitter


Tags: Linux