Por que precisamos do comando “at” no Linux?

32

Eu estava estudando código no qual o comando at é usado. Eu olhei ao redor e descobri que ele é usado para executar trabalhos em lote. É usado para agendar trabalhos. É dado, como sua entrada, um comando e um tempo, relativo ou absoluto.

Então, minha primeira pergunta é: por que o comando at é usado? Em que circunstâncias é necessário usar at ? Eu o encontrei quando havia algum código de script bash tentando desinstalar o software e quando alguns serviços de segundo plano eram reiniciados.

Minha segunda pergunta: qual é a diferença entre ter qualquer comando executado como um trabalho em lote e ter um comando executado no comando de chamada diretamente (ou em sub-linha)?

    
por Akshay Patil 28.10.2013 / 07:52

5 respostas

43

A resposta de Bernhard está correta: em sistemas multiusuários, a capacidade de executar programas pesados em algumas horas ímpias da noite é especialmente conveniente, tanto para a pessoa que está enviando o trabalho quanto para seus colegas de trabalho. Faz parte de "brincar bem".

Eu fiz a maior parte do meu Ph.D. computações dessa maneira, combinando o script com o comando nice que rebaixava a prioridade do meu trabalho sempre que outras pessoas mantinham a máquina ocupada, enquanto deixava intacta sua capacidade de armazenar todos os recursos do sistema à noite.

Eu usei o mesmo comando para verificar se meu programa estava sendo executado e reiniciá-lo, se necessário.

Além disso, você deve ter em mente que at foi escrito bem antes de tela, tmux , e assim por diante, de modo que era uma maneira simples de ter um shell separado , ou seja, um que não morreria depois de ter terminado o sistema.

Por fim, você também deve notar que é diferente do cron, que também existe há muito tempo. A diferença está no fato de que at é ocasional, enquanto o cron, sendo tão repetitivo, é mais adequado para tarefas do sistema que realmente precisam ser executadas para sempre em intervalos fixos: na verdade, at dá a você o seu próprio environment, com suas próprias configurações (e escolhas) da variável de ambiente, enquanto o cron usa um conjunto mínimo de variáveis de ambiente (apenas verifique a diferença em PATH , como um exemplo).

    
por 28.10.2013 / 08:51
16

Eu uso o comando at quando preciso fazer algum processamento pesado em dados, o que quero executar durante a noite, quando não estou atrás do computador. Claro que eu poderia começar o processo logo depois de sair, mas isso é algo que eu costumo esquecer.

O resultado do comando não é diferente da execução regular do script ou comando.

    
por 28.10.2013 / 08:02
14

Quando você tiver perguntas como essa, consulte sempre as páginas do manual. Eles podem ser muito esclarecedores.

O que faz

trecho da página man

NAME
       at, batch, atq, atrm - queue, examine or delete jobs for later execution

DESCRIPTION
       at  and  batch  read  commands  from  standard  input or a specified file
       which are to be executed at a later time, using /bin/sh.

Uso

O uso das ferramentas:

Usage: at [-V] [-q x] [-f file] [-mldbv] timespec ...
       at [-V] [-q x] [-f file] [-mldbv] -t time
       at -c job ...
       atq [-V] [-q x]
       atrm [-V] job ...
       batch

at inclui 4 comandos ( at , atq , atrm e batch ). Você usa at e batch para agendar os trabalhos, atq para ver o que está agendado e atrm para remover um trabalho antes da execução.

$ at -f <cmd> timspec

Timespec

O tempo para executar o trabalho at pode ser especificado de maneiras diferentes.

formulário de excerto na página man

At allows fairly complex time specifications, extending the POSIX.2 standard. It accepts times of the form HH:MM to run a job at a specific time of day. (If that time is already past, the next day is assumed.) You may also specify mid‐ night, noon, or teatime (4pm) and you can have a time-of-day suffixed with AM or PM for running in the morning or the evening. You can also say what day the job will be run, by giving a date in the form month-name day with an optional year, or giving a date of the form MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD. The specification of a date must follow the specification of the time of day. You can also give times like now + count time-units, where the time- units can be minutes, hours, days, or weeks and you can tell at to run the job today by suffixing the time with today and to run the job tomorrow by suffixing the time with tomorrow.

Exemplos

Digamos que você tenha este script de shell.

$ cat mycrontest.sh

#!/bin/bash
 echo "It is now $(date +%T) on $(date +%A)"

Execução da amostra:

$ ./mycrontest.sh
It is now 18:37:42 on Friday

Amostra no envio de trabalhos:

$ at -f mycrontest.sh  10pm tomorrow
job 14 at Sun Jul  8 22:00:00 2007

$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007

$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007

$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007

Referências

por 28.10.2013 / 13:34
6

Você pode executar tarefas em lote no UNIX / Linux usando qualquer um dos três comandos - at, batch ou cron.

Agende um trabalho usando data e hora específicas

Syntax:

    $ at time date
For example, to schedule a job at 11 am on May 20, use the following at command.

    $ at 11 am may 20
    
por 28.10.2013 / 12:34
5

Seu administrador de rede informa que alguma manutenção ocorrerá em seus servidores da web a partir das 19h e terminando às 2h. Você deseja veicular uma notificação de manutenção antecipadamente e deseja o máximo de tempo de atividade do sistema. Você vai ficar acordado a noite toda, pronto para executar vários comandos e, em seguida, iniciá-lo novamente mais tarde? Não, você gostaria de usar at para agendar essas tarefas, depois ir para a cama / jogar skyrim e esquecer isso.

    
por 28.10.2013 / 11:50

Tags