Agendando tarefas com o comando at no Linux

O comando at no Linux é uma excelente forma de agendar tarefas/comandos que devem ser executadas apenas uma vez no Linux. É importante ter em mente que seu uso é indicado para tarefas únicas, aquelas que devem ser executadas em uma data específica. Para tarefas recorrentes o cron e crontab são mais adequados.

Vamos nesse artigo ver algumas formas de utilizar o comando at. Abaixo uma lista dos comandos que devem ser conhecidos para um bom gerenciamento de tarefas.

  • comando at executa comandos em um data/hora específicas
  • comando atq lista as tarefas agendadas de um determinado usuário, já para um superusuário o comando atq irá listar as tarefas de todos os usuários
  • comando atrm é utilizado para deletar as tarefas agendadas pelo at
  • comando batch executa comandos quando os níveis de carga do sistema permitir, em outras palavras, quando a média de carga cai abaixo de 1,5 ou no valor especificado no atd.

O comando at

A sintaxe básica do comando at é bem simples (at [opções] HORA). Algumas opções úteis para o comando at

  • -m: envia um email para o usuário quando a tarefa for completada
  • -M: nunca envia o email para usuário
  • -f: lê as tarefas do arquivo especificado
  • -c: exibe as tarefas agendas na tela
  • -t: especifica a data/hora da tarefa, no formato YYYYMMDDhhmm

Exemplos de uso do comando at

Antes de agendar uma tarefa é bom ver a sua data/hora atual. Use o comando date para isso. Abaixo a nossa hora enquanto estamos escrevendo esse artigo.

dltec ~ $date
Qui Out 18 11:35:57 BRT 2012
dltec ~ $

Agendando tarefas via comando

Vamos supor que você queira reiniciar seu micro ao meio dia de hoje. Você pode agendar uma tarefa de reinicialização na hora desejada informando ao comando at para executar o comando shutdown -r 12:00. Claro que o seu usuário precisa ter permissão para executar esse comando, caso contrário o agendamento será feito com sucesso mas a tarefa não seria executada.

Basta entrar com o comando at HORA. Em seguida insira as tarefas que desejar, para finalizar pressione CTRL+D. Veja abaixo:

dltec ~ $at 12:00
warning: commands will be executed using /bin/sh
at> shutdown -r now
at> <EOT>
job 12 at Thu Oct 18 12:00:00 2012
dltec ~ $

Agendando tarefas de um arquivo

Com o comando at opção -f você pode agendar as tarefas descritas em um determinado arquivo. Vamos ver um exemplo, suponha que você está realizando um download que vai terminar só de madrugada. E para complicar um pouquinho você deseja, que assim que o download termine, seja feito um backup desse arquivo que está baixando em uma pasta do seu micro. Você pode criar um arquivo, especificar todas as tarefas que deseja nesse arquivo e em seguida agendar uma tarefa com o comando at para ler esse arquivo na hora marcada.

Vamos ver passo a passo para entender.

1. O download do arquivo xyz.tar está sendo feito na pasta Downloads dentro do seu home e  irá terminar só lá pela 01 da manhã. Então para garantir você vai agendar uma tarefa para as 3 da madruga.

2. Você quer que seja criada uma pasta chamada /meuarquivonovo no seu home (~/meuarquivonovo)

3. Você quer que o arquivo baixado seja copiado para essa pasta

4. Por último você quer que o micro desligue, vamos colocar para ele desligar 5 minutos depois para dar tempo de copiar o arquivo.

Antes de mais nada você precisa criar um arquivo com essas instruções, vamos criar o arquivo chamado tarefas em nosso home. Basta abrir o nano ou vi, colocar em cada linha uma tarefa e salvar o arquivo com o nome desejado, em nosso se chamará tarefa. Veja o conteúdo do arquivo:

mkdir ~/meuarquivonovo;

cp ~/Downloads/xyz.tar ~/meuarquivonovo;

shutdown -P +5;

Feito isso, basta agendar uma tarefa com o comando at para que ele leia o arquivo tarefa as 03:00:

# Primeiro vamos ver o conteúdo do arquivo tarefas para conferir se está tudo ok
dltec ~ $cat tarefa
mkdir ~/meuarquivonovo;
cp ~/Downloads/xyz.tar ~/meuarquivonovo;
shutdown -P +5;

# Agora vamos agendar uma tarefa para 03:00
dltec ~ $at -f tarefa 03:00
warning: commands will be executed using /bin/sh
job 13 at Thu Oct 19 03:00:00 2012

# Também poderíamos utilizar a opção -t para especificar a data, que teríamos o mesmo efeito
dltec ~ $at -f tarefa -t 201210190300
warning: commands will be executed using /bin/sh
job 13 at Thu Oct 19 03:00:00 2012

Verificando as tarefas agendadas pelo comando at

Vimos acima como agendar as tarefas, já para verificar as tarefas agendas você deve utilizar o comando atq. O comando atq irá listar todas as tarefas agendadas pelo seu usuário. Se estiver logado como root irá exibir todas as tarefas agendadas e mostrar de quais usuários são. Veja um exemplo:

# atq via usuário dltec, vê somente as tarefas desse usuário
dltec ~ $atq
8 Thu Oct 18 22:00:00 2012 a dltec

# atq via root, vê todas as tarefas e no final diz qual é o dono da tarefa
root@dltec-linux:~# atq
14 Fri Oct 19 03:00:00 2012 a root
8 Thu Oct 18 22:00:00 2012 a dltec
15 Fri Oct 19 01:05:00 2012 a root
16 Fri Oct 19 03:00:00 2012 a root

Com a visualização acima você não consegue ver os detalhes da tarefa, o que vemos é somente o horário que cada tarefa será executada. Para abrir os detalhes utilize o comando at com a opção -c seguido pelo número da tarefa. Por exemplo, para vermos os detalhes da tarefa 8 utilizamos na forma abaixo.

dltec ~ $at -c 8

Removendo as tarefas agendadas pelo comando at

Para cancelar uma tarefa que foi agendada pelo comando at basta utilizar o comando atrm (at remove). A sintaxe é bem simples, atrm jobnumber. Veja abaixo o exemplo onde iremos cancelar a tarefa número 8.

dltec ~$atrm 8

Limitando usuários de utilizar o comando at

Algumas vezes você desejar limitar o uso do at para alguns usuários. Isso é feito através de dois arquivo o /etc/at.allow e o /etc/at.deny. O formato do arquivo é bem simples, consiste dos nomes do usuários, um em cada linha e sem espaços em branco no final de cada nome.

Muita vezes o arquivo /etc/at.allow não existe, então o sistema irá procurar se o usuário existe no arquivo /etc/at.deny. Normalmente no arquivo /etc/at.deny temos uma listagem de vários usuários de sistema, tais como bin, backup, ftp etc.

Se quiser proibir algum usuário de executar o comando at basta editar esse arquivo /etc/at.deny e colocar o nome do usuário nesse arquivo.

Bem pessoal, por hora é isso aí.

Se você tem interesse em aprender mais sobre o Linux, conheça os Cursos Linux Online da DlteC do Brasil.  Temos cursos que vão do básico ao avançado, voltados para as certificações LPI. Utilize o cupom PTI para ter 10% de desconto nos cursos da DlteC!

Fonte: Blog da DlteC

Alexei C Tavares

Mais artigos deste autor »

Graduado em Engenharia Eletrônica/Telecomunicações pela UTFPR, é Co-Fundador da DlteC do Brasil e trabalha com Telecomunicações e Redes desde 1997. Com grande experiência em treinamentos, possui diversas certificações na área e também é autor de livros, tais como Roteadores e Switches - Guia para Certificação CCNA e CCENT - 2a. Edição.


1 Comentários

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!