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
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ê agendarbatch
(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 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.
at
mandar. - 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 derw-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:
- Você só pode usar o
batch
comandar interativamente. - 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. - 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 usadosat
para agendar trabalhos.at.allow
: Listas que eles podem usarat
para agendar trabalhos. Se eleat.allow
O arquivo não existe,at
apenas use oat.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
.