Zoeken op website

Hoe u een Linux-opdracht elke X seconden voor altijd kunt uitvoeren of herhalen


Een systeembeheerder moet vaak binnen een bepaalde tijd een opdracht herhaaldelijk uitvoeren. Vaak kunnen dergelijke taken eenvoudig worden uitgevoerd met eenvoudige cron-opdrachten. In de meeste gevallen zou dit moeten werken, maar de kortste periode waarin u de cron-opdracht kunt uitvoeren is elke minuut. Geloof het of niet, maar in veel gevallen gaat dit te langzaam.

In deze zelfstudie leert u eenvoudige scripttechnieken om een bepaalde opdracht in een continu actieve status te controleren of in de gaten te houden, vergelijkbaar met de topopdracht (het proces en het geheugengebruik continu controleren) standaard elke 3 seconden.

We zullen niet stoppen om de redenen te bespreken waarom u zo vaak opdrachten moet uitvoeren. Ik geloof dat iedereen daar verschillende redenen voor heeft in zijn dagelijkse werk of zelfs thuis op pc's en laptops.

1. Gebruik horloge-opdracht

Watch is een Linux-opdracht waarmee u periodiek een opdracht of programma kunt uitvoeren en de uitvoer ook op het scherm kunt zien. Dit betekent dat u de programma-uitvoer op tijd kunt zien. Standaard voert het horloge de opdracht/het programma elke 2 seconden opnieuw uit. Het interval kan eenvoudig worden gewijzigd om aan uw wensen te voldoen.

Controleer het geheugengebruik

"Watch" is uiterst eenvoudig te gebruiken. Om het te testen, kunt u meteen een Linux-terminal opstarten en de volgende opdracht typen:

watch free -m

Met de bovenstaande opdracht wordt het vrije geheugen van uw systeem gecontroleerd en worden de resultaten van de gratis opdracht elke twee seconden bijgewerkt.

Zoals u kunt zien in de bovenstaande uitvoer, heeft u een koptekst die informatie weergeeft over (van links naar rechts) het update-interval, de opdracht die wordt uitgevoerd en de huidige tijd. Als u deze header wilt verbergen, kunt u de optie -t gebruiken.

De volgende logische vraag is: hoe verander je het uitvoeringsinterval? Voor dat doel kunt u de optie -n gebruiken, die het interval specificeert waarmee de opdracht wordt uitgevoerd. Dit interval wordt opgegeven in seconden. Stel dat u uw script.sh-bestand elke 10 seconden wilt uitvoeren, dan kunt u dit als volgt doen:

watch -n 10 script.sh

Merk op dat als je de opdracht uitvoert zoals hierboven weergegeven, je moet cd naar de map (leer 15 cd-opdrachtvoorbeelden) waar het script zich bevindt of specificeer anderszins het volledige pad naar dat script.

Andere nuttige opties voor het horloge-commando zijn:

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

Monitor ingelogde gebruikers, uptime en belastingsgemiddelde

Stel dat u ingelogde gebruikers, de uptime van de server en de gemiddelde uitvoer elke paar seconden in een continue fase wilt monitoren, en gebruik dan de volgende opdracht zoals weergegeven:

watch uptime

Om de opdracht af te sluiten, drukt u op CTRL+C.

Hier wordt de opdracht 'uptime' uitgevoerd en worden de bijgewerkte resultaten standaard elke 2 seconden weergegeven.

Bewaak de voortgang van de kopieeropdracht

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

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

Als u denkt dat het bovenstaande proces te ingewikkeld is om uit te voeren, dan raad ik u aan om de opdracht Geavanceerd kopiëren te gebruiken, die de voortgang van de gegevens tijdens het kopiëren laat zien.

2. Gebruik slaapcommando

Slaap wordt vaak gebruikt om shellscripts te debuggen, maar heeft ook veel andere nuttige doeleinden. Als je het bijvoorbeeld combineert met for of while loops, kun je behoorlijk geweldige resultaten krijgen.

Als je nieuw bent bij bash-scripting, kun je hier onze gids over bash-loops raadplegen.

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

Met de bovenstaande lussen kun je bash vertellen een commando uit te voeren, N seconden te slapen en dan het commando opnieuw uit te voeren.

Hieronder zie je voorbeelden van beide lussen:

voor lus Voorbeeld

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

De bovenstaande one-liner voert het echo-commando uit en geeft de huidige datum weer, in totaal 10 keer, met 5 seconden slaap tussen uitvoeringen.

Hier is een voorbeelduitvoer:

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

U kunt de opdrachten echo en datum wijzigen met uw eigen opdrachten of script en het slaapinterval naar wens wijzigen.

while-lus Voorbeeld

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

Hier is een voorbeelduitvoer:

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

De bovenstaande opdracht wordt uitgevoerd totdat deze door de gebruiker wordt beëindigd of onderbroken. Het kan van pas komen als u een opdracht moet uitvoeren die op de achtergrond draait en u niet op cron wilt rekenen.

Belangrijk: wanneer u de bovenstaande methoden gebruikt, wordt het ten zeerste aanbevolen dat u het interval lang genoeg instelt, zodat uw opdracht voldoende tijd krijgt om te voltooien, vóór de volgende uitvoering.

Conclusie

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

  1. Gebruik cron wanneer u regelmatig opdrachten moet uitvoeren, zelfs nadat het systeem opnieuw is opgestart.
  2. Gebruik de methoden die in deze tutorial worden uitgelegd voor programma's/scripts die bedoeld zijn om binnen de huidige gebruikerssessie te worden uitgevoerd.

Als u vragen of opmerkingen heeft, aarzel dan niet om deze in het commentaargedeelte hieronder in te dienen.