Com executar o repetir una ordre de Linux cada X segons per sempre


Sovint, un administrador del sistema necessita executar una ordre repetidament en determinats períodes de temps. Sovint, aquestes tasques es poden completar fàcilment amb ordres cron simples. En la majoria dels casos, això hauria de funcionar, però el període més curt en què podeu executar l'ordre cron és cada 1 minut. Ho creieu o no, en molts casos això és massa lent.

En aquest tutorial, aprendràs unes tècniques de programació de seqüències senzilles per supervisar o vigilar una ordre concreta en estat d'execució contínua similar a l'ordre superior (controlar contínuament el procés i l'ús de la memòria) per defecte cada 3 segons.

No ens aturarem a discutir les raons per les quals hauríeu d'executar ordres tan sovint. Crec que cadascú té diferents raons per això en la seva feina diària o fins i tot a les ordinadors i ordinadors portàtils de casa.

1. Utilitzeu l'ordre watch

Watch és una ordre de Linux que us permet executar una ordre o programa periòdicament i també us mostra la sortida a la pantalla. Això vol dir que podreu veure la sortida del programa a temps. Per defecte, el rellotge torna a executar l'ordre/programa cada 2 segons. L'interval es pot canviar fàcilment per satisfer els vostres requisits.

Watch és extremadament fàcil d'utilitzar, per provar-ho, podeu encendre un terminal Linux immediatament i escriure l'ordre següent:

# watch free -m

L'ordre anterior comprovarà la memòria lliure del vostre sistema i actualitzarà els resultats de l'ordre gratuït cada dos segons.

Tal com es veu a la sortida anterior, teniu una capçalera que mostra informació sobre l'interval d'actualització (d'esquerra a dreta), l'ordre que s'està executant i l'hora actual. Si voleu ocultar aquesta capçalera, podeu utilitzar l'opció -t.

La següent pregunta lògica és com canviar l'interval d'execució. Per a això, pots utilitzar l'opció -n, que especifica l'interval amb el qual s'executarà l'ordre. Aquest interval s'especifica en segons. Per tant, suposem que voleu executar el vostre fitxer script.sh cada 10 segons, podeu fer-ho així:

# watch -n 10 script.sh

Tingueu en compte que si executeu l'ordre com es mostra més amunt, haureu d'enviar cd al directori (aprendre Exemples d'ordres de 15 cd) on es troba l'script o, en cas contrari, especificar el camí complet a aquest script.

Altres opcions útils de l'ordre de rellotge són:

  1. -b: crea un so si la sortida de l'ordre és diferent de zero.
  2. -c: interpreta les seqüències de color ANSI.
  3. -d: ressalta els canvis a la sortida de l'ordre.

Suposem que voleu controlar els usuaris connectats, el temps d'activitat del servidor i la càrrega mitjana de la sortida en fase contínua cada pocs segons i, a continuació, utilitzeu l'ordre següent tal com es mostra:

# watch uptime

Per sortir de l'ordre, premeu CTRL+C.

Aquí, l'ordre uptime s'executarà i mostrarà els resultats actualitzats cada 2 segons de manera predeterminada.

A Linux, mentre copieu fitxers d'una ubicació a una altra mitjançant l'ordre cp, el progrés de les dades no es mostra, per veure el progrés de les dades que s'estan copiant, podeu utilitzar el watch comanda juntament amb l'ordre du -s per comprovar l'ús del disc en temps real.

# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
# watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 

Si creieu que el procés anterior és massa complicat d'aconseguir, us suggereixo que aneu a l'ordre de còpia avançada, que mostra el progrés de les dades durant la còpia.

2. Utilitzeu l'ordre sleep

Sleep s'utilitza sovint per depurar scripts d'intèrpret d'ordres, però també té molts altres propòsits útils. Per exemple, quan es combinen amb bucles for o while, podeu obtenir resultats força impressionants.

Si sou nou en els scripts de bash, podeu consultar la nostra guia sobre bucles bash aquí.

En cas que és la primera vegada que sentiu parlar de l'ordre \sleep\, s'utilitza per retardar alguna cosa durant un període de temps especificat. En els scripts, podeu utilitzar-lo per dir-li al vostre script que executi l'ordre 1, espereu 10 segons i, a continuació, executeu l'ordre 2.

Amb els bucles anteriors, podeu dir a bash que executi una ordre, que dormi durant N segons i que torni a executar l'ordre.

A continuació podeu veure exemples dels dos bucles:

# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

La línia anterior executarà l'ordre d'eco i mostrarà la data actual, un total de 10 vegades, amb 5 segons de repòs entre execucions.

Aquí teniu una mostra de sortida:

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

Podeu canviar les ordres d'eco i data amb les vostres pròpies ordres o script i canviar l'interval de repòs segons les vostres necessitats.

# while true; do echo -n "This is a test of while loop";date ; sleep 5; done

Aquí teniu una mostra de sortida:

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

L'ordre anterior s'executarà fins que l'usuari l'interrompi o l'interrompi. Pot ser útil si necessiteu executar una ordre que s'executa en segon pla i no voleu comptar amb cron.

Important: quan utilitzeu els mètodes anteriors, és molt recomanable que configureu un interval prou llarg com per donar temps suficient a la vostra ordre per acabar d'executar-se, abans de la següent execució.

Conclusió

Les mostres d'aquest tutorial són útils, però no estan pensades per substituir completament la utilitat cron. Depèn de vostè trobar quina us funciona millor, però si hem de separar l'ús d'ambdues tècniques, diria això:

  1. Utilitzeu cron quan necessiteu executar ordres periòdicament fins i tot després de reiniciar el sistema.
  2. Utilitzeu els mètodes que s'expliquen en aquest tutorial per als programes/scripts que s'han d'executar dins de la sessió d'usuari actual.

Com sempre, si teniu cap pregunta o comentari, no dubteu a enviar-los a la secció de comentaris a continuació.