Hoe een Linux-opdracht uit te voeren of te herhalen Elke X seconden voor altijd

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.

Run Linux Command Every Second

In deze tutorial leer je eenvoudige scripttechnieken om een specifieke opdracht te monitoren in een continu draaiende staat, vergelijkbaar met het top commando (continu monitoren van het proces- en geheugenverbruik) om de 3 seconden standaard.

We zullen niet stoppen om de redenen te bespreken waarom je opdrachten zo vaak zou moeten uitvoeren. Ik geloof dat iedereen daar verschillende redenen voor heeft in hun dagelijkse werk of zelfs thuis op pc’s en laptops.

1. Gebruik het watch Commando

Watch is een Linux commando waarmee je periodiek een opdracht of programma kunt uitvoeren en de uitvoer op het scherm kunt bekijken. Dit betekent dat je de programma-uitvoer op tijd kunt zien. Standaard voert watch de opdracht/het programma elke 2 seconden opnieuw uit. Het interval kan eenvoudig worden aangepast aan je behoeften.

Monitor Gebruik van Geheugen

“Watch” is extreem eenvoudig te gebruiken, om het te testen, kun je meteen een Linux-terminal openen en de volgende opdracht typen:

# watch free -m

De bovenstaande opdracht controleert het vrije geheugen van je systeem en werkt de resultaten van het free commando elke twee seconden bij.

Monitor Memory Usage in Linux

Zoals te zien is in de bovenstaande uitvoer, heb je een kop, die informatie weergeeft over (van links naar rechts) update-interval, de uitgevoerde opdracht en de huidige tijd. Als je deze kop wilt verbergen, kun je de optie -t gebruiken.

De volgende logische vraag is – hoe verander je het uitvoeringsinterval. Voor dat doel kun je de -n optie gebruiken, die het interval aangeeft waarmee het commando wordt uitgevoerd. Dit interval wordt aangegeven in seconden. Dus laten we zeggen dat je je script.sh bestand elke 10 seconden wilt laten uitvoeren, dan kun je het zo doen:

# watch -n 10 script.sh

Let op dat als je het commando uitvoert zoals hierboven getoond, je naar de directory moet cd‘en (leer Leer 15 cd Commando Voorbeelden) waar het script zich bevindt of anders het volledige pad naar dat script moet specificeren.

Andere nuttige opties van het watch commando zijn:

  1. -b – creëert een piepgeluid als de uitvoer van het commando niet-nul is.
  2. -c – Interpreteert ANSI-kleurreeksen.
  3. -d – markeert de wijzigingen in de uitvoer van het commando.

Bewaak ingelogde gebruikers, uptime en belasting gemiddelde

Laten we zeggen dat je ingelogde gebruikers, server uptime en belasting gemiddelde output continu wilt monitoren elke paar seconden, gebruik dan het volgende commando zoals getoond:

# watch uptime
Watch Linux Load Average

Om het commando te verlaten, druk op CTRL+C.

Hier zal het 'uptime' commando standaard elke 2 seconden worden uitgevoerd en de bijgewerkte resultaten weergeven.

Bewaak de voortgang van het kopieercommando

In Linux, tijdens het kopiëren van bestanden van de ene locatie naar de andere met het cp commando, wordt de voortgang van de gegevens niet weergegeven. Om de voortgang van de gekopieerde gegevens te zien, kunt u het watch commando gebruiken in combinatie met het du -s commando om de schijfruimte te controleren in realtime.

# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
# watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 
Monitor Progress of Copy Command

Als u denkt dat het bovenstaande proces te gecompliceerd is om te bereiken, raad ik u aan om het Advance copy commando te gebruiken, dat de voortgang van de gegevens weergeeft tijdens het kopiëren.

2. Gebruik sleep Commando

Sleep wordt vaak gebruikt om shell scripts te debuggen, maar het heeft ook vele andere nuttige toepassingen. Bijvoorbeeld, wanneer gecombineerd met for of while loops, kunt u geweldige resultaten behalen.

Als u nieuw bent in bash scripting, kunt u onze gids over bash loops hier bekijken.

Als dit de eerste keer is dat u over het "sleep" commando hoort, wordt het gebruikt om iets voor een opgegeven hoeveelheid tijd te vertragen. In scripts kunt u het gebruiken om uw script te vertellen om commando 1 uit te voeren, 10 seconden te wachten en vervolgens commando 2 uit te voeren.

Met de bovenstaande loops kunt u bash vertellen om een commando uit te voeren, N seconden te wachten en vervolgens het commando opnieuw uit te voeren.

Hieronder ziet u voorbeelden van beide loops:

for loop Voorbeeld

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

De bovenstaande one liner zal het echo commando uitvoeren en de huidige datum weergeven, in totaal 10 keer, met 5 seconden pauze tussen de uitvoeringen.

Hier is een voorbeeld van de output:

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

Je kunt het echo en date commando’s wijzigen met je eigen commando’s of script en de pauze interval aanpassen naar jouw behoeften.

while loop Voorbeeld

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

Hier is een voorbeeld van de output:

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

Het bovenstaande commando zal blijven draaien totdat het ofwel wordt gestopt of onderbroken door de gebruiker. Het kan handig zijn als je een commando wilt laten draaien in de achtergrond en niet wilt vertrouwen op cron.

Belangrijk: Bij gebruik van bovenstaande methoden wordt het sterk aanbevolen om een interval lang genoeg in te stellen om je commando voldoende tijd te geven om te voltooien voordat de volgende uitvoering plaatsvindt.

Conclusie

De voorbeelden in deze tutorial zijn nuttig, maar zijn niet bedoeld om het gebruik van het cron hulpprogramma volledig te vervangen. Het is aan jou om te bepalen welke het beste voor je werkt, maar als we het gebruik van beide technieken moeten scheiden, zou ik zeggen dit:

  1. Gebruik cron wanneer je commando’s periodiek wilt laten uitvoeren, zelfs na systeemherstarts.
  2. Gebruik de methoden die in deze tutorial worden uitgelegd voor programma’s/scripts die bedoeld zijn om uitgevoerd te worden binnen de huidige gebruikersessie.

Als je vragen of opmerkingen hebt, aarzel dan niet om ze in de opmerkingensectie hieronder in te dienen.

Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/