Hvordan kjøre eller gjenta en Linux-kommando hvert X. sekund for alltid


En systemadministrator trenger ofte å kjøre en kommando gjentatte ganger i en viss tidsperiode. Ofte kan slike oppgaver enkelt utføres med enkle cron-kommandoer. I de fleste tilfeller bør dette fungere, men den korteste perioden du kan kjøre cron-kommando er hvert 1. minutt. Tro det eller ei, i mange tilfeller går dette for sakte.

I denne opplæringen lærer du en enkel skriptteknikk for å overvåke eller holde et øye med en bestemt kommando i kontinuerlig kjørende tilstand som ligner på toppkommando (kontinuerlig overvåk prosessen og minnebruken) for hvert tredje sekund som standard.

Vi vil ikke stoppe for å diskutere årsakene til hvorfor du må kjøre kommandoer så ofte. Jeg tror alle har forskjellige grunner til det i sine daglige jobber eller til og med hjemme-PCer og bærbare datamaskiner.

1. Bruk klokkekommando

Se er en Linux-kommando som lar deg utføre en kommando eller et program med jevne mellomrom, og som også viser utdata på skjermen. Dette betyr at du vil kunne se programutgangen i tide. Som standard kjører klokken kommandoen/programmet på nytt hvert 2. sekund. Intervallet kan enkelt endres for å møte dine krav.

Overvåk minnebruk

"Se" er ekstremt enkel å bruke, for å teste den kan du starte en Linux-terminal med en gang og skrive inn følgende kommando:

watch free -m

Kommandoen ovenfor vil sjekke systemets ledige minne og oppdatere resultatene av den ledige kommandoen hvert annet sekund.

Som det fremgår av utdataene ovenfor, har du en overskrift som viser informasjon om (fra venstre til høyre) oppdateringsintervall, kommando som utføres og gjeldende tid. Hvis du ønsker å skjule denne overskriften, kan du bruke -t-alternativet.

Det neste logiske spørsmålet er – hvordan endre utførelsesintervallet. For det formålet kan du bruke -n-alternativet, som spesifiserer intervallet som kommandoen skal utføres med. Dette intervallet er spesifisert i sekunder. Så la oss si at du vil kjøre script.sh-filen hvert 10. sekund, du kan gjøre det slik:

watch -n 10 script.sh

Merk at hvis du kjører kommandoen som vist ovenfor, må du cd til katalogen (lær Lær 15 cd-kommandoeksempler) der skriptet er lokalisert, eller spesifiser på annen måte hele banen til det skriptet.

Andre nyttige alternativer for klokkekommando er:

  1. -b – lager en pipelyd hvis utgangen av kommandoen ikke er null.
  2. -c – Tolker ANSI-fargesekvenser.
  3. -d – fremhever endringene i kommandoutgangen.

Overvåk påloggede brukere, oppetid og belastningsgjennomsnitt

La oss si at du vil overvåke påloggede brukere, serveroppetid og laste gjennomsnittlig utgang i kontinuerlig fase med noen sekunders mellomrom, og bruk deretter følgende kommando som vist:

watch uptime

For å avslutte kommandoen, trykk CTRL+C.

Her vil kommandoen 'oppetid' kjøre og vise de oppdaterte resultatene hvert 2. sekund som standard.

Overvåk fremdriften til kopieringskommandoen

I Linux, mens du kopierer filer fra ett sted til et annet ved hjelp av cp-kommandoen, vises ikke fremdriften til data. For å se fremdriften til data som kopieres, kan du bruke watch kommando sammen med du -s kommando for å sjekke diskbruken i sanntid.

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

Hvis du synes at prosessen ovenfor er for komplisert å oppnå, foreslår jeg at du går for Advance copy-kommandoen, som viser fremdriften til data mens du kopierer.

2. Bruk sleep Command

Søvn brukes ofte til å feilsøke shell-skript, men det har også mange andre nyttige formål. For eksempel, når det kombineres med for eller while-løkker, kan du få ganske fantastiske resultater.

Hvis du er ny på bash-skripting, kan du sjekke guiden vår om bash-løkker her.

I tilfelle det er første gang du hører om kommandoen "sleep", brukes den til å utsette noe i en bestemt tidsperiode. I skript kan du bruke det til å fortelle skriptet ditt å kjøre kommando 1, vente i 10 sekunder og deretter kjøre kommando 2.

Med løkkene ovenfor kan du fortelle bash å kjøre en kommando, sove i N sekunder og deretter kjøre kommandoen på nytt.

Nedenfor kan du se eksempler på begge løkkene:

for loop Eksempel

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

Den ene linjen ovenfor kjører ekko-kommandoen og viser gjeldende dato, totalt 10 ganger, med 5 sekunders søvn mellom henrettelsene.

Her er et eksempelutgang:

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

Du kan endre kommandoene ekko og dato med dine egne kommandoer eller skript og endre søvnintervallet etter dine behov.

mens loop Eksempel

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

Her er eksempelutgang:

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

Kommandoen ovenfor kjører til den enten blir drept eller avbrutt av brukeren. Det kan være nyttig hvis du trenger å kjøre en kommando som kjører i bakgrunnen og du ikke vil stole på cron.

Viktig: Når du bruker metodene ovenfor, anbefales det på det sterkeste at du setter et intervall som er langt nok til å gi nok tid til kommandoen til å fullføre kjøringen, før neste kjøring.

Konklusjon

Eksemplene i denne opplæringen er nyttige, men er ikke ment å erstatte cron-verktøyet fullstendig. Det er opp til deg å finne hvilken som fungerer best for deg, men hvis vi må skille bruken av begge teknikkene, vil jeg si dette:

  1. Bruk cron når du trenger å kjøre kommandoer med jevne mellomrom, selv etter at systemet har startet på nytt.
  2. Bruk metodene som er forklart i denne opplæringen for programmer/skript som er ment å kjøre innenfor gjeldende brukerøkt.

Som alltid hvis du har spørsmål eller kommentarer, ikke nøl med å sende dem inn i kommentarfeltet nedenfor.