Header Ads

Como usar at e batch no Linux para agendar comandos

Fatmawati Achmad Zaenuri / Shutterstock

Se você deseja agendar um trabalho Linux que acontecerá apenas uma vez, o cron é um exagero. A família de comandos é o que você precisa! E se você deseja executar processos apenas quando seu sistema tiver recursos livres, poderá usar o lote.

Como agendar trabalhos do Linux

O daemon cron mantém uma lista de tarefas executadas em horários específicos. Essas tarefas e programas são executados em segundo plano nos horários agendados. Isso oferece uma grande flexibilidade para agendar tarefas que precisam ser repetidas. Se você precisar executar uma tarefa a cada hora, em um horário específico do dia ou uma vez por mês ou ano, poderá configurá-la no cron.

No entanto, isso não ajuda se você deseja agendar uma tarefa para ser executada apenas uma vez. Claro, você pode configurá-lo no cron, mas lembre-se de voltar e remover a entrada crontab após a execução da tarefa, o que é inconveniente.

Com o Linux, se você está enfrentando um problema, é quase uma garantia de que alguém também lutou com ele. Felizmente, como os sistemas operacionais Unix existem há tanto tempo, também há uma excelente chance de alguém ter criado uma solução para o seu problema.

Para o problema descrito acima, eles têm e é chamado em.

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

Instalando o comando at

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

Para instalar no Ubuntu, use este comando:

 sudo apt-get install em 

Após a conclusão da instalação, você pode iniciar o at daemon com este comando:

 sudo systemctl enable --now atd. service 

No Manjaro, você instala em com este comando:

 sudo pacman -Sy em 

Após a conclusão da instalação, digite este comando para iniciar o at daemon:

 sudo systemctl enable --now atd. service 

Em qualquer distribuição, você pode digitar este comando para garantir que o daemon atd esteja sendo executado:

 ps -e | grep atd 

Como usar o comando at interativamente

Para usar em, você precisa atribuir uma data e hora para executar. Há muita flexibilidade na maneira como você pode escrevê-las, que abordaremos mais adiante neste artigo.

No entanto, apesar de usarmos interativamente, você precisa fornecer a data e a hora antecipadamente. Se você não incluir nada na linha de comando, ou digitar algo que não seja uma data e hora, responda com a "Hora ilegível", ” como mostrado abaixo:

 em 

 na banana 

Datas e horários podem ser explícitos ou relativos. Por exemplo, digamos que você deseja que um comando seja executado daqui a um minuto. em saber o que é agora ” significa, então você pode usar agora e adicionar um minuto a ele, assim:

 no momento + 1 minuto 

at imprime uma mensagem e um prompt, e espera que você digite os comandos que deseja agendar. Primeiro, porém, considere a mensagem, como mostrado abaixo:

Diz a você que inicia uma instância do sh shell e executará os comandos dentro dele. Seus comandos não serão executados no shell Bash, que é compatível com o shell sh, mas possui um conjunto de recursos mais rico.

Se seus comandos ou scripts tentarem usar uma função ou recurso fornecido pelo Bash, mas não o fizer, eles falharão.

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

 sh 

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

Para retornar ao shell Bash, digite o comando exit:

 sair 

Você não verá nenhuma saída padrão ou mensagens de erro dos comandos. Isso ocorre porque o sh shell é iniciado como uma tarefa em segundo plano e é executado sem qualquer tipo de interface de tela.

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

Muitos (a maioria) dos sistemas Linux não têm um sistema de email interno, pois raramente há necessidade de um. Aqueles que normalmente usam um sistema como sendmail ou postfix. Se o seu sistema não tiver um sistema interno de e-mail, você poderá gravar scripts em arquivos ou redirecionar a saída para arquivos para adicionar log.

Se o comando não gerar nenhuma saída padrão ou mensagens de erro, você não receberá um email de qualquer maneira. Muitos comandos do Linux indicam sucesso via silêncio; portanto, na maioria dos casos, você não recebe um email.

RELACIONADOS: O que são stdin, stdout e stderr no Linux?

Agora, é hora de digitar um comando em. Neste exemplo, usaremos um pequeno arquivo de script chamado sweep. sh que exclui os arquivos * . bak, * . tmp e * .o. Digite o caminho para o comando, como mostrado abaixo, e pressione Enter.

Outro prompt de comando aparece e você pode adicionar quantos comandos quiser. É geralmente mais conveniente ter seus comandos em um único script e simplesmente chamá-lo de dentro para.

Pressione Ctrl + D para confirmar se você adicionou comandos. em shows < EOT & gt ;, que significa fim da transmissão. Você foi informado do número do trabalho e quando o trabalho está programado para ser executado, conforme mostrado abaixo:

Após a execução do trabalho, digite o seguinte para verificar seu e-mail interno:

 mail 

Se não houver correio, você deverá assumir o sucesso. Obviamente, nesse caso, você pode verificar e ver se os arquivos * . bak, * . tmp e * .o foram excluídos para confirmar que o comando funcionou.

Digite o seguinte para executar a coisa toda novamente:

 no momento + 1 minuto 

Após um minuto, digite o seguinte para verificar novamente seu e-mail:

 mail 

Ei, 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 a serem excluídos porque, quando executamos o script anteriormente, ele os removeu.

Pressione D + Enter para excluir o email e Q + Enter para sair do programa de email.

Formatos de data e hora

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

  • Execute às 11:00:
  • às 11:00
  • Execute às 11:00 amanhã:
  • às 11:00 amanhã
  • Execute às 11:00 neste dia da próxima semana:
  • às 11:00 da próxima semana
  • Execute neste momento, neste dia, próxima semana:
  • na próxima semana
  • Execute às 11:00 da próxima sexta-feira:
  • às 11:00 da próxima sexta-feira
  • < li> Execute neste horário na próxima sexta-feira:
  • na próxima sexta-feira
  • Execute às 11:00 nesta data, no próximo mês:
  • às 11:00 no próximo mês
  • Execute às 11:00 em uma data específica:
  • às 11:00 15/3/2020
  • Execute daqui a 30 minutos :
  • agora + 30 minutos
  • Execute daqui a duas horas:
  • agora + 2 horas
  • Execute amanhã amanhã :
  • amanhã
  • Execute nesta hora na quinta-feira:
  • na quinta-feira
  • Execute às 12:00:
  • à meia-noite
  • Execute às 12:00:
  • ao meio-dia
  • Se você é britânico, pode até agendar um comando a ser executado na hora do chá (16:00):
  • na hora do chá

Observando a fila de tarefas

Você pode digitar o comando atq para ver a fila de trabalhos agendados, como mostrado abaixo.

Para cada comando na fila, o atq exibe as seguintes informações:

  • ID do trabalho
  • Data agendada
  • Horário agendado
  • Na fila em que o trabalho está. As filas são identificadas como “ a, ” “ b, ” e assim por diante. As tarefas normais com as quais você agendar entra na fila “ a, ” enquanto as tarefas agendadas com o lote (abordadas mais adiante neste artigo) entram na fila "b." ”
  • A pessoa que agendou o trabalho.

Usando at na linha de comando

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

Você pode inserir comandos em at, assim:

 eco "sh ~ / sweep. sh" | às 08:45 

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

RELACIONADO: Como usar Pipes no Linux

Usando at com arquivos de comandos

Você também pode armazenar uma sequência de comandos em um arquivo e passá-la para em. Esse pode ser um arquivo de texto sem formatação de comandos, não precisa ser um script executável.

Você pode usar a opção -f (file) da seguinte maneira para passar um nome de arquivo para em:

 no momento + 5 minutos -f clean. txt 

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

 agora + 5 minutos < clean. txt 

Removendo trabalhos agendados da fila

Para remover um trabalho agendado da fila, você pode usar o comando atrm. Se você deseja ver a fila primeiro para encontrar o número do trabalho que deseja remover, use atq. Em seguida, use esse número de trabalho com atrm, como mostrado abaixo:

 atq 

 atrm 11 

 atq 

Como visualizar uma visão detalhada dos trabalhos

Como mencionamos anteriormente, você pode agendar trabalhos no futuro. Às vezes, você pode esquecer o que um trabalho fará. O comando atq mostra os trabalhos na fila, mas não o que eles farão. Se você deseja ver uma visão detalhada de um trabalho, pode usar a opção -c (cat).

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

 atq 

Agora, usaremos o trabalho número 13 com a opção -c:

 em -c 13 

Aqui está uma descrição das informações que recebemos de volta sobre o trabalho:

  • Primeira linha: indica que os comandos serão executados no shell sh.
  • Segunda linha: Vemos que os comandos serão executados com um ID de usuário e grupo de 1000. Estes são os valores para a pessoa que executou o comando at.
  • Terceira linha: a pessoa que recebe e-mails é útil.
  • Quarta linha: a máscara do usuário é 22. Essa é a máscara usada para defina as permissões padrão para todos os arquivos criados nesta sessão sh. A máscara é subtraída de 666, o que nos dá 644 (o equivalente octal 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 acessado. Se não puder, um erro será gerado e a execução do trabalho será abandonada.
  • Os comandos a serem executados. Eles estão listados e o conteúdo dos scripts agendados é exibido. Observe que, embora o script em nosso exemplo acima tenha sido escrito para ser executado no Bash, ele ainda será executado em um shell sh.

O comando em lote

O comando em lote opera de maneira semelhante ao comando at, mas com três diferenças significativas:

  • Você só pode usar o comando em lote interativamente.
  • Em vez de agendar tarefas para serem executadas em um horário específico, você as adiciona à fila e o comando em lote as executa quando o sistema & # A carga média do 8217; é menor que 1,5.
  • Devido ao acima, você nunca especifica uma data e hora com o comando batch.

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

 lote 

Em seguida, adicione tarefas da mesma forma que faria com o comando at.

Controlando o acesso ao comando at

Os arquivos at. allow e at. deny controlam quem pode usar a família de comandos at. Eles estão localizados no diretório / etc. Por padrão, apenas o arquivo at. deny existe e é criado quando o at é instalado.

Veja como isso funciona:

  • at. deny: lista aplicativos e entidades que não podem ser usados ​​em para agendar tarefas.
  • at. allow: lista quem pode usar em para agendar tarefas. Se o arquivo at. allow não existir, at usará apenas o arquivo at. deny.

Por padrão, qualquer pessoa pode usar em. Se você deseja restringir quem pode usá-lo, use o arquivo at. allow para listar aqueles que podem. Isso é mais fácil do que adicionar todos que não podem usar at no arquivo at. deny.

Veja como é o arquivo at. deny:

 sudo menos /etc/at. deny

O arquivo lista os componentes do sistema operacional que não podem ser utilizados em. Muitos deles são impedidos de fazê-lo por razões de segurança; portanto, você não deseja remover nenhum do arquivo.

Agora, editaremos o arquivo at. allow. Vamos adicionar dave e mary, mas ninguém mais poderá usar.

Primeiro, digitamos o seguinte:

 sudo gedit /etc/at. allow

No editor, adicionamos os dois nomes, como mostrado abaixo, e salvamos o arquivo.

Se alguém tentar usar o, ele será informado de que ele não tem permissão. Por exemplo, digamos que um usuário chamado eric digite o seguinte:

 em 

Ele seria recusado, como mostrado abaixo.

Novamente, eric não está no arquivo at. deny. Assim que você coloca alguém no arquivo at. allow, qualquer um e todos os outros têm permissão negada para usar em.

Ótimo para one-offs

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

  • Quando você precisar fazer algo que não é um processo regular, programe-o em.
  • Se você deseja executar uma tarefa apenas quando a carga do sistema estiver baixa o suficiente, use lote.

Via: How to Geek

Veja Também:

Nenhum comentário