Como usar at e batch no Linux para programar comandos

Conteúdo

Uma janela de terminal em um sistema Linux.

Se você quiser agendar um trabalho do Linux, isso acontecerá apenas uma vez, cron é exagerado. a at família de comando é o que você precisa! E se você quiser executar processos apenas quando seu sistema tiver recursos livres, você pode usar batch.

Como agendar trabalhos Linux

a cron demônio mantém uma lista de tarefas que você executa em horários específicos. Essas tarefas e programas são executados em segundo plano no horário agendado. Isso lhe dá grande flexibilidade no agendamento de tarefas que precisam ser repetidas.. Se você precisa executar uma tarefa uma vez a cada hora, em um horário específico a cada dia, ou pelo menos uma vez por mês ou um ano, você pode configurá-lo para cron.

Apesar disto, isso não ajuda se você deseja agendar uma tarefa para ser executada apenas uma vez. Claro, você pode configurá-lo em cron, mas então você deve se lembrar de voltar e remover o entrada crontab depois que a tarefa for executada, o que é inconveniente.

Com Linux, se você está lutando com um obstáculo, é quase uma garantia de que outra pessoa também lutou com ele. Por sorte, porque os sistemas operacionais do tipo Unix existem há muito tempo, além disso, há uma grande chance de que alguém tenha criado uma solução para o seu problema.

Para o problema descrito anteriormente, eles fizeram isso e é chamado at.

RELACIONADO: Como agendar tarefas no Linux: Introdução aos arquivos Crontab

Instalando o comando at

Tivemos que instalar at no Ubuntu 18.04 e Manjaro 18.1.0 (já estava instalado no Fedora 31).

Instalar at no Ubuntu, use este comando:

sudo apt-get install em

Depois que a instalação for concluída, você pode começar o at daemon com este comando:

sudo systemctl enable --now atd.service

Em manjaro, você instala at com este comando:

sudo pacman -Si em

Depois que a instalação for concluída, digite este comando para iniciar o at diabo:

sudo systemctl enable --now atd.service

Em qualquer distribuição, você pode digitar este comando para ter certeza atd o daemon está rodando:

ps -e | grep atd

Como usar o comando at interativamente

Usar at, você deve atribuir uma data e hora para executar. Há muita flexibilidade na maneira como você pode escrevê-los, que iremos cobrir mais tarde neste post.

Apesar disto, mesmo quando vamos usar at interativamente, você deve fornecer a data e hora com antecedência. Se você não incluir nada na linha de comando ou digitar algo que não seja uma data e hora, at responder com “Hora ilegível”, como é mostrado a seguir:

no
na banana

Datas e horários podem ser explícitos ou relativos. Como um exemplo, digamos que você deseja que um comando seja executado em um minuto. at saiba o que isso significa “agora”, então você pode usar now e espere um minuto, Então:

agora + 1 minuto

at imprimir uma mensagem e um at e espere você digitar os comandos que deseja programar. Primeiro, Apesar disto, considere a mensagem, como é mostrado a seguir:

Te disse at lançar uma instância do sh concha e vontade execute os comandos dentro desse. Seus comandos não serão executados no shell bash, que é compatível com o sh shell, mas tem um conjunto mais rico de funções.

Se seus comandos ou scripts tentarem usar uma função ou recurso que o Bash fornece, mas sh não o faça, vai falhar.

É fácil testar se seus comandos ou scripts serão executados em sh. Use o sh comando para iniciar um sh Concha:

sh

O prompt de comando muda para um cifrão ($), e agora você pode executar seus comandos e verificar se eles funcionam corretamente.

Para retornar ao shell bash, escreva o exit comando:

saída

Você não verá nenhuma mensagem de erro ou saída padrão dos comandos. Isto é porque sh o shell começa como uma tarefa em segundo plano e é executado sem nenhuma interface de tela.

Qualquer saída dos comandos, bom ou mau, é enviado para você por e-mail. É enviado através do sistema de correio interno para quem executa o at comando. Isso significa que você deve instalar e configurar esse sistema de e-mail interno.

Muito de (a maioria) dos sistemas Linux não têm um sistema de e-mail interno, já que um raramente é necessário. Aqueles que normalmente usam um sistema como enviar correio o sufixo. Se o seu sistema não possui um sistema de e-mail interno, você pode ter scripts gravados em arquivos ou redirecionar a saída para arquivos para adicionar registros.

Se o comando não gerar uma mensagem de erro ou saída padrão, você não receberá um e-mail de qualquer maneira. Muitos comandos do Linux indicam sucesso por meio do silêncio, então na maioria dos casos, você não receberá um e-mail.

RELACIONADO: O que são stdin, stdout y stderr en Linux?

Agora é a hora de digitar um comando at. Para este exemplo, vamos usar um pequeno arquivo de script chamado sweep.sh que apaga o *.bak, *.tmp, e *.o registros. Insira o caminho para o comando, como é mostrado a seguir, e pressione Enter.

Outro prompt de comando aparece e você pode adicionar quantos comandos quiser. Em geral, é mais conveniente ter seus comandos em um único script e apenas chamar esse script de dentro at.

Presione Ctrl + D para dizer at você terminou de adicionar comandos. at shows , o que significa fim da transmissão. Você é informado do número do trabalho e quando está programado para ser executado, como é mostrado a seguir:

Depois que o trabalho for executado, escreva o seguinte para verificar seu e-mail interno:

correspondência

Se não houver correio, deve assumir o sucesso. De qualquer forma, nesta circunstância, você pode verificar e ver se o *.bak , *.tmp, e *.o Os arquivos foram removidos para confirmar que o comando funcionou.

Digite o seguinte para executar tudo de novo:

agora + 1 minuto

Depois de um minuto, escreva o seguinte para verificar novamente o seu e-mail:

correspondência

¡Oye, nós temos correio! Para ler a mensagem número um, pressione 1 e pressione Enter.

Recebemos um email de at porque os comandos no script geraram mensagens de erro. Neste exemplo, não havia arquivos para remover porque quando executamos o script anteriormente, eliminou-os.

Pressione D + Digite para remover o e-mail e Q + Digite para sair do programa de e-mail.

Formatos de data e hora

Você tem muita flexibilidade quando se trata dos formatos de hora que pode usar com at. Aqui estão alguns exemplos:

  • Correr em 11:00 sou:
  • Corra amanhã às 11:00 sou:
  • Correr em 11:00 uma. M. A partir deste dia na próxima semana:
  • Corra neste momento, neste dia, a próxima semana:
  • Correr em 11:00 sou na próxima sexta:
  • Corra a esta hora na próxima sexta-feira:
  • Correr em 11:00 estou nesta data, o próximo mês:
  • Correr em 11:00 estou em uma data específica:
  • Correr dentro 30 minutos:
  • Executar dentro de duas horas:
  • Corra a esta hora amanhã:
  • Corra a esta hora na quinta-feira:
  • Correr em 12:00 sou:
  • Correr em 12:00 PM:
  • Se você é britânico, você pode até programar um comando para ser executado na hora do chá (4 p. M.):

Olhando para a fila de trabalhos

Você pode escrever o atq comando para ver a fila de trabalhos agendados, como é mostrado a seguir.

Para cada comando na fila, atq mostre a próxima informação:

  • Identificação do trabalho
  • Cita agendada
  • Horário marcado
  • Fila onde está o trabalho. As filas são rotuladas como “uma”, “b”, etc. Tarefas normais com as quais você programa at entre na fila “uma”, enquanto as tarefas que você agendar batch (que são discutidos mais tarde neste post) entre na fila “b”.
  • A pessoa que programou o trabalho.

Usando at na linha de comando

Você não deve usar at interativamente; você também pode usá-lo no comando. Isso facilita o uso de scripts internos.

Você pode canalizar comandos para at, assim:

eco "sh ~ / sweep.sh" | no 08:45 SOU

O trabalho é aceito e agendado por at, e o número do trabalho e a data de execução são relatados como antes.

RELACIONADO: Como usar Pipes no Linux

Use at com scripts

Você também pode armazenar um script em um arquivo e depois passá-lo para at. Pode ser um arquivo de script de texto simples, não precisa ser um script executável.

Você pode usar o -f (Arquivo) como segue para passar um nome de arquivo para at:

agora + 5 minutos -f clean.txt

Você pode obter o mesmo resultado se redirecionar o arquivo para at:

agora + 5 minutos < clean.txt

Removendo trabalhos agendados da fila

Para remover um trabalho agendado da fila, você pode usar o atrm comando. Se você quiser ver a fila primeiro para encontrar o número do trabalho que deseja remover, você pode usar atq . Subseqüentemente, use aquele número comercial com atrm, Como mostrado abaixo:

e
atrm 11
e

Como ter uma visão detalhada dos empregos

Como já mencionamos anteriormente, pode agendar trabalhos no futuro. As vezes, você pode esquecer o que um trabalho vai fazer. a atq O comando exibe os trabalhos na fila, mas não o que eles vão fazer. Se você quiser ver uma visão detalhada de um trabalho, você pode usar o -c (Gato) opção.

Primeiro, usaremos atq para encontrar o número do trabalho:

e

Agora, vamos usar o número do trabalho 13 com ele -c opção:

at -c 13

Aqui está um detalhamento das informações que obtemos sobre o trabalho:

  • Primeira linha: Isso nos diz que os comandos serão executados sob o sh Concha.
  • Segunda linha: Vemos que os comandos serão executados com um usuário e ID de grupo de 1000. Estes são os valores para a pessoa que dirigiu o at comando.
  • Terceira linha: A pessoa que recebe os e-mails. atmandar.
  • Quarta linha: a Máscara de usuário isto é 22. Esta é a máscara que é usada para determinar as permissões padrão para qualquer arquivo criado neste sh sessão. A máscara é subtraída de 666, o que nos dá 644 (o octal idêntico de rw-r--r--).
  • Dados restantes: A maioria são variáveis ​​de ambiente.

  • Resultados de um teste. Um teste verifica se o diretório de execução pode ser inserido. Se ele não pode, um erro é gerado e a execução do trabalho é abandonada.
  • Os comandos para executar. Eles são listados e o conteúdo dos scripts que estão programados é exibido. Observe que embora o script em nosso exemplo acima tenha sido escrito para rodar em Bash, ainda funcionará em um sh Concha.

O comando batch

a batch comando opera de forma semelhante al at comando, mas com três diferenças significativas:

  1. Você só pode usar o batch comandar interativamente.
  2. Em vez de agendar tarefas para serem executadas em um horário específico, adiciona-os à fila e ao batch O comando os executa quando a carga média do sistema é menor que 1,5.
  3. Devido ao anterior, nunca especifique uma data e hora com o batch comando.

Quando você usa o batch comando, chama pelo nome sem parâmetros de linha de comando como este:

lote

A seguir, adicione tarefas da mesma forma que faria com o at comando.

Controle o acesso ao comando at

a at.allow e at.deny os arquivos controlam quem pode usar o at família de comando. Estes são encontrados dentro do /etc diretório. Por padrão, só o at.deny arquivo existe e é criado quando at está instalado.

É assim que funcionam:

  • at.deny: Liste os aplicativos e entidades que não podem ser usados at para agendar trabalhos.
  • at.allow: Listas que eles podem usar at para agendar trabalhos. Se ele at.allow O arquivo não existe, at apenas use o at.deny procedimentos.

Por padrão, qualquer um pode usar at. Se você quiser restringir quem pode usá-lo, usar el at.allow arquivo para listar aqueles que podem. Isso é mais fácil do que adicionar todos que não podem usar at al at.deny procedimentos.

Isto é o que at.deny o arquivo parece:

sudo menos /etc/at.deny

O arquivo lista os componentes do sistema operacional que eles não podem usar at. Muitos deles não podem fazer isso por razões de segurança, então você não quer remover nenhum dos arquivos.

Agora, vamos editar o at.allow procedimentos. Vamos adicionar dave e mary, mas ninguém mais será capaz de usar at.

Primeiro, nós escrevemos o seguinte:

sudo gedit /etc/at.allow

No editor, nós adicionamos os dois nomes, como é mostrado a seguir, e então salvamos o arquivo.

Se alguém tentar usar at, eles vão te dizer que você não tem permissão. Como um exemplo, digamos que um usuário chamado eric escreva o seguinte:

no

Seria rejeitado, como é mostrado a seguir.

De novo, eric Não está no at.deny procedimentos. Assim que você colocar alguém no at.allow Arquivo, todos os outros têm permissão negada para usar at.

Ótimo para ocasiões excepcionais

Como você pode ver, ambos at e batch eles são ideais para tarefas que você só precisa executar uma vez. Novamente, como uma revisão rápida:

  • Quando você precisa fazer algo diferente de um procedimento regular, programa com at.
  • Se você deseja executar uma tarefa apenas quando a carga do sistema estiver baixa o suficiente, usar batch.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.