Cum sa rulezi o comanda in Linux la intervale de timp stabilite

Configurare noua (How To)

Situatie

      Un administrator de sistem deseori are nevoie sa ruleze o  comanda in mod repetat la anumite perioade de timp. Acest task se poate realiza folosind comenzi cron simple.

      Cron este un job scheduler care permite executarea unor acțiuni la un moment dat în timp. Acțiunile sunt definite în general prin scripturi, și sunt rulate de cron la intervale regulate. Este folosit în principal pentru a administrarea sistemului, însă poate fi folosit și pentru activități generale precum conectarea la internet sau descărcarea emailurilor.

      In cele mai multe din cazuri functioneaza, dar cea mai scurta perioada pe care o puteti folosi este de 1 minut ceea ce in cele mai multe cazuri este prea mult.

    p0

     In acest articol, va voi arata o metoda simpla de scripting ce ajuta la monitorizarea unei comenzi anumece ruleaza in mod continuu, similar comenzii top (ce monitorizeaza in mod continuu procesele si gradul de utilizare a memoriei), din 3 in 3 secunde (by default).

Solutie

Pasi de urmat

Utilizarea comenzii watch

Watch este o comanda linux ce iti permite sa executi o comanda sau un program in mod periodic si in acelasi timp afiseaza si output-ul pe ecran. Ceea ce inseamna ca vei putea vedea output-ul in timp real. By default, watch re-executa comanda/programul la fiecare 2 secunde. Intervalul poate fi modificat dupa bunul plac.

Monitorizarea memoriei utilizatem

Watch este foarte simplu de folosit.

ex:            watch free -m

Comanda de mai sus va verifica memoria libera si va reactualiza rezultatele comenzii free la fiecare 2 secunde.

p1Dupa cum se poate vedea avem in partea de sus a output-ului intervalul de timp actualizat, mai jos avem comanda ce este in executie si data si ora exacta. Daca doriti sa ascundeti header-ul puteti folosi optiunea -t.

Urmatoarea intrebare logica este cum se schimba intervalul de executie. Pentru acest lucru, putem folosi optiunea -n care specifica intervalul de executie. Acest interval este specificat in secunde.

Sa presupunem ca doriti sa executati un script  script.sh la fiecare 10 secunde:

warch -n 10 script.sh

Alte optiuni utile:

-b – creaza un bunet daca output-ul comenzii este non-zero

-c – Interpreteaza secventa de culori ANSI

-d – evidentiaza schimbarile din output-ul comenzii

Monitorizare logged-on users, uptime, load average

Sa spunem ca vrem sa monitorizam utilizatorii logati, timpul de logare si incarcarea intr-un output continuu actualizat la fiecare x secunde. In acest caz vom folosi urmatoarea comanda:

watch uptime

p2

Pentru a parasi secventa apasam CTRL+C

Monitorizarea progresului comenzii copy

In Linux, in timp ce se copiaza fisiere dintr-o locatie in alta, folosind comanda cp , progresul de copiere nu este afisat. pentru a putea vedea progresul de copiere putem folosi comanda watch impreuna cu du -s.

cp ubuntu-15.10-desktop-amd64.iso /home/Alin/ &

watch -n 0.1 du -s /home/Alin/ubuntu-15.10-desktop-amd64.iso

p3

 

Utilizarea comenzii sleep

Sleep este deseori folosita pentru debug-ul scripturilor de shell, dar are multe alte utilitati deasemenea. De exemplu, in combinatie cu reetitivele for sau while, puteti obtine rezultate deosebite.

In esenta sleep este folosita pentru a intarzia ceva pentru o perioada anume. In scripturi, o puteti folosi pentru a face scriptul sa ruleze comanda 1, sa astepte x secunde dupa care sa ruleze comanda 2.

Cu repetitivele de mai sus puteti spune bash-ului sa ruleze o comanda, sleep pentru N secunde dupa care sa ruleze comanda din nou.

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

Afiseaza:

This is a test in loop 1 Mon Apr 11 14:49:47 EET 2016
This is a test in loop 2 Mon Apr 11 14:49:52 EET 2016
This is a test in loop 3 Mon Apr 11 14:49:57 EET 2016
This is a test in loop 4 Mon Apr 11 14:50:02 EET 2016
This is a test in loop 5 Mon Apr 11 14:50:07 EET 2016

 

Tip solutie

Permanent

Voteaza

(3 out of 10 people found this article helpful)

Despre Autor

Leave A Comment?