A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

Neste tutorial, você aprenderá técnicas simples de script para monitorar ou ficar de olho em um comando específico em estado de execução contínua, similar ao comando top (monitora continuamente o processo e a utilização de memória) a cada 3 segundos por padrão.
Não vamos parar para discutir os motivos pelos quais você precisaria executar comandos com tanta frequência. Acredito que cada pessoa tenha diferentes motivos para isso em seus trabalhos diários ou até mesmo em PCs e laptops domésticos.
1. Usando o Comando watch
Watch é um comando do Linux que permite executar um comando ou programa periodicamente e também mostra a saída na tela. Isso significa que você poderá ver a saída do programa em tempo real. Por padrão, o watch reexecuta o comando/programa a cada 2 segundos. O intervalo pode ser facilmente alterado para atender às suas necessidades.
Monitorando o Uso de Memória
O “Watch” é extremamente fácil de usar, para testá-lo, você pode abrir imediatamente um terminal do Linux e digitar o seguinte comando:
# watch free -m
O comando acima verificará a memória livre do seu sistema e atualizará os resultados do comando free a cada dois segundos.

Conforme visto na saída acima, você tem um cabeçalho, exibindo informações sobre (da esquerda para a direita) intervalo de atualização, comando que está sendo executado e horário atual. Se desejar ocultar este cabeçalho, você pode usar a opção -t
.
A próxima pergunta lógica é – como alterar o intervalo de execução. Para isso, você pode usar a opção -n
, que especifica o intervalo com o qual o comando será executado. Este intervalo é especificado em segundos. Então, digamos que você queira executar seu arquivo script.sh
a cada 10 segundos, você pode fazer assim:
# watch -n 10 script.sh
Observe que se você executar o comando como mostrado acima, precisará cd
para o diretório (aprenda Aprenda 15 Exemplos de Comando cd) onde o script está localizado ou especificar o caminho completo para esse script.
Outras opções úteis do comando watch são:
-b
– cria um som de beep se a saída do comando for diferente de zero.-c
– Interpreta sequências de cores ANSI.-d
– destaca as alterações na saída do comando.
Monitorar Usuários Logados, Tempo de Atividade e Média de Carga
Digamos que você queira monitorar usuários logados, tempo de atividade do servidor e saída da média de carga continuamente a cada poucos segundos, então use o seguinte comando conforme mostrado:
# watch uptime

Para sair do comando, pressione CTRL+C
.
Aqui, o comando 'uptime'
será executado e exibirá os resultados atualizados a cada 2 segundos por padrão.
Monitorar Progresso do Comando de Cópia
No Linux, ao copiar arquivos de um local para outro usando o comando cp
, o progresso dos dados não é mostrado. Para ver o progresso dos dados sendo copiados, você pode usar o comando watch
junto com o comando du -s para verificar o uso do disco em tempo real.
# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ & # watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso

Se você achar que o processo acima é muito complicado de alcançar, então sugiro que você opte pelo comando de cópia avançado, que mostra o progresso dos dados durante a cópia.
2. Use o comando sleep
O Sleep é frequentemente usado para depurar scripts de shell, mas também tem muitos outros propósitos úteis. Por exemplo, quando combinado com os loops for
ou while
, você pode obter resultados muito bons.
Se você é novo em scripts bash, pode verificar nosso guia sobre loops bash aqui.
No caso de esta ser a primeira vez que você ouve falar do comando "sleep"
, ele é usado para atrasar algo por um período de tempo especificado. Em scripts, você pode usá-lo para dizer ao seu script para executar o comando 1, esperar 10 segundos e depois executar o comando 2.
Com os loops acima, você pode dizer ao bash para executar um comando, dormir por N segundos e depois executar o comando novamente.
Abaixo você pode ver exemplos de ambos os loops:
Exemplo de loop for
# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
O acima, em uma linha, executará o comando echo e exibirá a data atual, um total de 10 vezes, com um intervalo de 5 segundos entre as execuções.
Aqui está uma saída de exemplo:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016 This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016 This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016 This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016 This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016 This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016 This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016 This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016 This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016 This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
Você pode alterar os comandos echo e date com seus próprios comandos ou script e alterar o intervalo de espera conforme suas necessidades.
Exemplo de loop while
# while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Aqui está uma saída de exemplo:
This is a test of while loopWed Feb 17 20:52:32 EET 2016 This is a test of while loopWed Feb 17 20:52:37 EET 2016 This is a test of while loopWed Feb 17 20:52:42 EET 2016 This is a test of while loopWed Feb 17 20:52:47 EET 2016 This is a test of while loopWed Feb 17 20:52:52 EET 2016 This is a test of while loopWed Feb 17 20:52:57 EET 2016
O comando acima será executado até ser interrompido ou interrompido pelo usuário. Pode ser útil se você precisar executar um comando em segundo plano e não quiser depender do cron.
Importante: Ao usar os métodos acima, é altamente recomendável que você defina um intervalo longo o suficiente para dar tempo suficiente para que seu comando termine de ser executado antes da próxima execução.
Conclusão
As amostras neste tutorial são úteis, mas não se destinam a substituir completamente a utilidade cron. Cabe a você descobrir qual funciona melhor para você, mas se tivermos que separar o uso de ambas as técnicas, eu diria o seguinte:
- Use o cron quando precisar executar comandos periodicamente, mesmo após reinicializações do sistema.
- Use os métodos explicados neste tutorial para programas/scripts que são destinados a serem executados dentro da sessão do usuário atual.
Como sempre, se tiver alguma dúvida ou comentário, não hesite em enviá-los na seção de comentários abaixo.
Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/