Se você quiser agendar um trabalho do Linux que vai acontecer apenas uma vez, cron
é um exagero. A at
família de comandos é o que você precisa! E se você quiser executar processos apenas quando seu sistema tiver recursos livres, você pode usar batch
.
Índice
O cron
daemon mantém uma lista de tarefas que executa em horários específicos . Essas tarefas e programas são executados em segundo plano nos horários programados. Isso oferece grande flexibilidade para agendar 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 uma vez por mês ou ano, você pode configurá-la em cron
.
No entanto, isso não ajuda se você deseja agendar uma tarefa para ser executada apenas uma vez. Claro, você pode configurá-lo nocron
, mas então você deve se lembrar de voltar e remover a entrada do crontab após a execução da tarefa, o que é inconveniente.
Com o Linux, se você está lutando com um problema, é quase garantido que outra pessoa também tenha lutado com ele. Felizmente, como os sistemas operacionais do tipo 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 at
.
Tivemos que instalar at
no Ubuntu 18.04 e Manjaro 18.1.0 (já estava instalado no Fedora 31).
Para instalar at
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 at
com este comando:
sudo pacman -Si 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 atd
daemon esteja em execução:
ps -e | grep atd
Para usar at
, você deve atribuir uma data e hora de execução. Há uma grande flexibilidade na maneira como você pode escrevê-los, que abordaremos mais adiante neste artigo.
No entanto, embora vamos usar de forma at
interativa, você deve fornecer a data e a 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 distorcida”, conforme mostrado abaixo:
em
na banana
Datas e horários podem ser explícitos ou relativos. Por exemplo, digamos que você queira que um comando seja executado daqui a um minuto. at
sabe o que “agora” significa, então você pode usar now
e adicionar um minuto a ele, assim:
agora + 1 minuto
at
imprime uma mensagem e um at
prompt e espera que você digite os comandos que deseja agendar. Primeiro, porém, considere a mensagem, conforme mostrado abaixo:
Ele informa que você at
inicia uma instância do sh
shell e executa os comandos dentro dela . Seus comandos não serão executados no shell Bash, que é compatível com o sh
shell, mas possui um conjunto de recursos mais rico.
Se seus comandos ou scripts tentarem usar uma função ou recurso que o Bash fornece, mas sh
não oferece, eles falharão.
É fácil testar se seus comandos ou scripts serão executados sh
. Use o sh
comando para iniciar um sh
shell:
sh
O prompt de comando muda para um cifrão ( $
) e agora você pode executar seus comandos e verificar se funcionam corretamente.
Para retornar ao shell Bash, digite o exit
comando:
Saída
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 – boa ou ruim – é enviada por e-mail para você. É 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.
Muitos (a maioria) sistemas Linux não têm um sistema de e-mail interno, pois raramente há necessidade de um. Aqueles que usam normalmente um sistema como sendmail ou postfix . Se o seu sistema não tiver um sistema de e-mail interno, você pode ter scripts gravados em arquivos ou redirecionar a saída para arquivos para adicionar registro.
Se o comando não gerar nenhuma saída padrão ou mensagens de erro , você não receberá um e-mail de qualquer maneira. Muitos comandos do Linux indicam sucesso por meio do silêncio, portanto, na maioria dos casos, você não receberá um e-mail.
Agora, é hora de digitar um comando at
. Para este exemplo, vamos usar um pequeno arquivo de script chamado sweep.sh
que exclui os *.bak
, *.tmp
e *.o
arquivos. Digite o caminho para o comando, conforme mostrado abaixo, e pressione Enter.
Outro prompt de comando é exibido e você pode adicionar quantos comandos desejar. Geralmente é mais conveniente ter seus comandos em um único script e simplesmente chamar esse script de dentro at
.
Pressione Ctrl + D para informar at
que terminou de adicionar comandos. at
mostra <EOT>, que significa fim da transmissão . Você é informado do número do trabalho e quando o trabalho está agendado para ser executado, conforme mostrado abaixo:
Depois que o trabalho for executado, digite o seguinte para verificar seu e-mail interno:
enviar
Se não houver correio, você deve assumir o sucesso. É claro que, neste caso, você pode verificar e ver se a *.bak
, *.tmp
e *.o
arquivos foram apagados para confirmar o comando funcionou.
Digite o seguinte para executar tudo novamente:
agora + 1 minuto
Após um minuto, digite o seguinte para verificar novamente seu e-mail:
enviar
Ei, temos e-mail! Para ler a mensagem número um, pressione 1 e depois pressione Enter.
Recebemos um e-mail de at
porque os comandos no script geraram mensagens de erro. Neste exemplo, não havia arquivos para excluir porque quando executamos o script anteriormente, ele os removeu.
Pressione D + Enter para excluir o e-mail e Q + Enter para sair do programa de e-mail.
Você tem muita flexibilidade quando se trata dos formatos de hora com os quais pode usar at
. Aqui estão alguns exemplos:
às 11:00
amanhã às 11:00
às 11:00 da próxima semana
na próxima semana
às 11:00 da próxima sexta
na próxima sexta
às 11:00 no próximo mês
às 11:00 AM 15/03/2020
agora + 30 minutos
agora + 2 horas
amanhã
na quinta feira
à meia-noite
ao meio-dia
na hora do chá
Você pode digitar o atq
comando para ver a fila de trabalhos agendados, conforme mostrado abaixo.
Para cada comando na fila, atq
exibe as seguintes informações:
at
vão para a fila “a”, enquanto as tarefas que você programa batch
(abordadas posteriormente neste artigo) vão para a fila “b”Você não precisa usar at
interativamente; você também pode usá-lo no comando. Isso torna mais fácil usar dentro dos scripts.
Você pode canalizar comandos para at
, assim:
echo "sh ~ / sweep.sh" | às 08:45
O trabalho é aceito e agendado por at
, e o número do trabalho e a data de execução são relatados como antes.
Você também pode armazenar uma sequência de comandos em um arquivo e depois passá-la para at
. Pode ser um arquivo de texto simples de comandos – não precisa ser um script executável.
Você pode usar a -f
opção (arquivo) da seguinte maneira 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
Para remover um trabalho agendado da fila, você pode usar o atrm
comando. Se quiser ver a fila primeiro para encontrar o número do trabalho que deseja remover, você pode usar atq
. Em seguida, use esse número de trabalho com atrm
, conforme mostrado abaixo:
atq
atrm 11
atq
Como mencionamos anteriormente, você pode agendar trabalhos em um futuro distante. Às vezes, você pode esquecer o que um trabalho vai fazer. O atq
comando mostra os trabalhos na fila, mas não o que eles farão. Se quiser ter uma visão detalhada de um trabalho, você pode usar a -c
opção (cat).
Primeiro, usaremos atq
para encontrar o número do trabalho:
atq
Agora, usaremos o trabalho número 13 com a -c
opção:
em -c 13
Aqui está um detalhamento das informações que recebemos sobre o trabalho:
sh
shell.at
comando.at
envia.sh
sessão. A máscara é subtraída de 666, o que nos dá 644 (o equivalente octal de rw-r--r--
).sh
shell.O batch
comando opera de forma semelhante ao at
comando, mas com três diferenças significativas:
batch
comando interativamente.batch
comando os executa quando a carga média do sistema é inferior a 1,5.batch
comando.Ao usar o batch
comando, você o chama pelo nome, sem parâmetros de linha de comando, como:
lote
Em seguida, adicione tarefas como faria com o at
comando.
Os arquivos at.allow
e at.deny
controlam quem pode usar a at
família de comandos. Eles estão localizados no /etc
diretório. Por padrão, apenas o at.deny
arquivo existe e é criado quando at
é instalado.
Veja como funcionam:
at.deny
: Lista os aplicativos e entidades que não podem ser usados at
para agendar trabalhos.at.allow
: Listas que podem usar at
para agendar trabalhos. Se o at.allow
arquivo não existir, at
use apenas o at.deny
arquivo.Por padrão, qualquer pessoa pode usar at
. Se você quiser restringir quem pode usá-lo, use o at.allow
arquivo para listar quem pode. Isso é mais fácil do que adicionar at
ao at.deny
arquivo todas as pessoas que não podem usar .
Esta é a at.deny
aparência do arquivo:
sudo menos /etc/at.deny
O arquivo lista os componentes do sistema operacional que não podem ser usados at
. Muitos deles são impedidos de fazer isso por motivos de segurança, portanto, você não deseja remover nenhum do arquivo.
Agora, vamos editar o at.allow
arquivo. Vamos adicionar dave
e mary
, mas ninguém mais terá permissão para usar at
.
Primeiro, digitamos o seguinte:
sudo gedit /etc/at.allow
No editor, adicionamos os dois nomes, conforme mostrado abaixo, e então salvamos o arquivo.
Se alguém tentar usar at
, será informado de que não tem permissão. Por exemplo, digamos que um usuário denominado eric
digite o seguinte:
em
Ele seria recusado, conforme mostrado abaixo.
Novamente, eric
não está no at.deny
arquivo. Assim que você colocar qualquer pessoa no at.allow
arquivo, qualquer pessoa terá a permissão de uso negada at
.
Como você pode ver, ambos at
e batch
são ideais para tarefas que você só precisa executar uma vez. Novamente, como uma revisão rápida:
at
.batch
.Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…