Kako zagnati ali ponoviti ukaz za Linux vsakih X sekund za vedno


Sistemski skrbnik mora pogosto v določenih časovnih obdobjih večkrat zagnati ukaz. Takšna opravila je pogosto mogoče enostavno dokončati s preprostimi ukazi cron. V večini primerov bi to lahko delovalo, toda najkrajše obdobje, ki ga lahko zaženete, je vsaka 1 minuta. Verjeli ali ne, v mnogih primerih je to prepočasi.

V tej vadnici se boste naučili preprostih tehnik skriptiranja za spremljanje ali spremljanje določenega ukaza v neprekinjenem stanju, podobnem ukazu top (privzeto vsake 3 sekunde vsake 3 sekunde).

Ne bomo se ustavili, da bi razpravljali o razlogih, zakaj bi morali pogosto izvajati ukaze. Verjamem, da imajo vsi različne razloge za to v vsakdanjem delu ali celo doma v osebnih in prenosnih računalnikih.

1. Uporabite Watch Command

Watch je ukaz za Linux, ki vam omogoča, da ukaz ali program občasno izvajate in prikazuje tudi izpise na zaslonu. To pomeni, da boste lahko pravočasno videli izhod programa. Privzeto ura znova zažene ukaz/program vsaki 2 sekundi. Interval lahko enostavno spremenite tako, da ustreza vašim zahtevam.

"Watch" je izjemno enostaven za uporabo, če ga želite preizkusiti, lahko takoj zaženete terminal Linux in vnesete naslednji ukaz:

# watch free -m

Zgornji ukaz bo preveril prosti pomnilnik sistema in vsaki dve sekundi posodobil rezultate brezplačnega ukaza.

Kot je razvidno iz zgornjega izhoda, imate glavo, ki prikazuje informacije o (od leve proti desni) intervalu posodobitve, ukazu, ki se izvaja, in trenutnem času. Če želite skriti to glavo, lahko uporabite možnost -t .

Naslednje logično vprašanje je - kako spremeniti interval izvedbe. V ta namen lahko uporabite možnost -n , ki določa interval, s katerim se bo ukaz izvedel. Ta interval je določen v sekundah. Recimo, da želite datoteko script.sh zagnati vsakih 10 sekund, lahko to storite tako:

# watch -n 10 script.sh

Upoštevajte, da če zaženete ukaz, kot je prikazano zgoraj, boste morali cd v imenik (preberite, kako se učijo primeri cd ukaza 15 cd), kjer je skript, ali kako drugače določiti celotno pot do tega skripta.

Druge uporabne možnosti ukaza za gledanje so:

  1. -b - ustvari pisk, če izhod ukaza ni nič.
  2. -c - razlaga barvna zaporedja ANSI.
  3. -d - poudarja spremembe v izhodu ukaza.

Recimo, da želite spremljati prijavljene uporabnike, čas delovanja strežnika in nalagati povprečne izhodne podatke v nenehni fazi vsakih nekaj sekund, nato pa uporabite naslednji ukaz, kot je prikazano:

# watch uptime

Za izhod iz ukaza pritisnite CTRL + C .

Tu se bo zagnal ukaz uptime in privzeto vsaki dve sekundi prikazal posodobljene rezultate.

V Linuxu med kopiranjem datotek z enega mesta na drugo z ukazom cp napredek podatkov ni prikazan, če želite videti napredek kopiranih podatkov, lahko uporabite kodo watch ukaz skupaj z ukazom du -s za sprotno preverjanje uporabe diska.

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

Če menite, da je zgornji postopek preveč zapleten, potem predlagam, da uporabite ukaz Advance copy, ki prikazuje napredek podatkov med kopiranjem.

2. Uporabite ukaz za spanje

Spanje se pogosto uporablja za odpravljanje napak v skriptih lupine, vendar ima tudi številne druge uporabne namene. Na primer, v kombinaciji z zankami for ali while lahko dobite čudovite rezultate.

Če še niste začeli uporabljati bash skript, si lahko tukaj ogledate naš vodnik o bash zankah.

Če prvič slišite za ukaz \"sleep \" , se z njim odloži nekaj časa. V skriptih lahko z njim naročite skriptu, naj zažene ukaz 1, počaka 10 sekund in nato zažene ukaz 2.

Z zgornjimi zankami lahko bashu naročite, naj zažene ukaz, prespi N sekund in nato znova zažene ukaz.

Spodaj si lahko ogledate primere obeh zank:

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

Zgornja podloga bo zagnala ukaz echo in prikazala trenutni datum, skupaj 10-krat, s 5-sekundnim spanjem med izvedbami.

Tu je primer izhoda:

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

Ukaze odmeva in datuma lahko spremenite s svojimi ukazi ali skriptom in spremenite interval spanja glede na vaše potrebe.

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

Tu je vzorec izhoda:

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

Zgornji ukaz se bo zagnal, dokler ga uporabnik ne ubije ali prekine. Lahko pride v poštev, če morate zagnati ukaz, ki se izvaja v ozadju in ne želite računati na cron.

Pomembno: Ko uporabljate zgornje metode, je zelo priporočljivo, da pred naslednjo izvedbo nastavite interval, ki bo dovolj dolg, da bo ukaz imel dovolj časa, da se dokonča.

Zaključek

Vzorci v tej vadnici so koristni, vendar niso namenjeni popolni nadomestitvi pripomočka cron. Na vas je, da ugotovite, katera vam bolj ustreza, če pa moramo ločiti uporabo obeh tehnik, bi rekel naslednje:

  1. Uporabite cron, kadar morate redno izvajati ukaze tudi po ponovnem zagonu sistema.
  2. Uporabite metode, razložene v tej vadnici, za programe/skripte, ki naj bi se izvajali v trenutni seji uporabnika.

Kot vedno, če imate kakršna koli vprašanja ali pripombe, jih ne odlašajte v spodnjem oddelku za komentarje.