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.

In questo tutorial, imparerai delle semplici tecniche di scripting per monitorare o tenere d’occhio un particolare comando in esecuzione continua, simile al comando top (monitorare continuamente il processo e l’utilizzo della memoria) per ogni 3 secondi per impostazione predefinita.
Non ci soffermeremo a discutere i motivi per cui potresti avere bisogno di eseguire comandi così spesso. Credo che ognuno abbia motivazioni diverse per farlo nel proprio lavoro quotidiano o anche su PC e laptop domestici.
1. Usa il comando watch
Watch è un comando Linux che ti consente di eseguire periodicamente un comando o un programma e ti mostra anche l’output sullo schermo. Ciò significa che sarai in grado di vedere l’output del programma in tempo reale. Per impostazione predefinita, watch ri-esegue il comando/programma ogni 2 secondi. L’intervallo può essere facilmente modificato per soddisfare le tue esigenze.
Monitora l’utilizzo della memoria
“Watch” è estremamente facile da usare, per testarlo, puoi avviare immediatamente un terminale Linux e digitare il seguente comando:
# watch free -m
Il comando sopra verificherà la memoria libera del tuo sistema e aggiornerà i risultati del comando free ogni due secondi.

Come visto nell’output precedente, hai un’intestazione che mostra le informazioni su (da sinistra a destra) intervallo di aggiornamento, comando in esecuzione e ora attuale. Se desideri nascondere questa intestazione, puoi utilizzare l’opzione -t
.
La prossima domanda logica è – come cambiare l’intervallo di esecuzione. A tale scopo, è possibile utilizzare l’opzione -n
, che specifica l’intervallo con cui il comando verrà eseguito. Questo intervallo è specificato in secondi. Quindi diciamo che vuoi eseguire il tuo file script.sh
ogni 10 secondi, puoi farlo in questo modo:
# watch -n 10 script.sh
Nota che se esegui il comando come mostrato sopra, dovrai cd
nella directory (impara 15 Esempi di Comando cd) in cui si trova lo script o specificare diversamente il percorso completo di tale script.
Altre opzioni utili del comando watch sono:
-b
– crea un segnale acustico se l’uscita del comando non è zero.-c
– Interpreta le sequenze di colore ANSI.-d
– evidenzia le modifiche nell’output del comando.
Monitorare gli Utenti Loggati, l’Uptime e la Media del Carico
Immagina di voler monitorare gli utenti loggati, l’uptime del server e l’output medio del carico in modo continuo ogni pochi secondi, quindi utilizza il seguente comando come mostrato:
# watch uptime

Per uscire dal comando, premi CTRL+C
.
Qui, il comando 'uptime'
verrà eseguito e visualizzerà i risultati aggiornati ogni 2 secondi per impostazione predefinita.
Monitorare il Progresso del Comando di Copia
In Linux, durante la copia dei file da una posizione all’altra utilizzando il comando cp
, non viene mostrato il progresso dei dati; per visualizzare il progresso dei dati copiati, puoi utilizzare il comando watch
insieme al comando du -s per controllare l’utilizzo del disco in tempo reale.
# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ & # watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso

Se pensi che il processo sopra descritto sia troppo complicato da realizzare, ti suggerisco di optare per il comando di copia avanzato, che mostra il progresso dei dati durante la copia.
2. Utilizzare il comando sleep
Il comando Sleep viene spesso utilizzato per il debug degli script shell, ma ha anche molti altri scopi utili. Ad esempio, combinato con i cicli for
o while
, è possibile ottenere risultati sorprendenti.
Se sei nuovo allo scripting bash, puoi consultare la nostra guida sui cicli bash qui.
Nel caso in cui questa sia la prima volta che senti parlare del comando "sleep"
, viene utilizzato per ritardare qualcosa per un determinato periodo di tempo. Negli script, puoi usarlo per dire allo script di eseguire il comando 1, attendere 10 secondi e poi eseguire il comando 2.
Con i cicli sopra riportati, puoi dire a bash di eseguire un comando, dormire per N secondi e quindi eseguire nuovamente il comando.
Di seguito puoi vedere esempi di entrambi i cicli:
Esempio di ciclo for
# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
La riga sopra, eseguirà il comando echo e visualizzerà la data corrente, per un totale di 10 volte, con un intervallo di 5 secondi tra le esecuzioni.
Ecco un esempio di 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
Puoi cambiare i comandi echo e date con i tuoi comandi o script e modificare l’intervallo di pausa secondo le tue esigenze.
Esempio di ciclo while
# while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Ecco un esempio di 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
Il comando sopra verrà eseguito fino a quando non viene interrotto o interrotto dall’utente. Può essere utile se hai bisogno di eseguire un comando in background e non vuoi fare affidamento su cron.
Importante: Quando si utilizzano i metodi sopra, è altamente consigliabile impostare un intervallo sufficientemente lungo per dare abbastanza tempo al tuo comando per completare l’esecuzione, prima della successiva esecuzione.
Conclusione
Gli esempi in questo tutorial sono utili, ma non sono destinati a sostituire completamente l’utilità di cron. Sta a te trovare quale funziona meglio per te, ma se dovessimo separare l’uso di entrambe le tecniche, direi questo:
- Usa cron quando hai bisogno di eseguire comandi periodicamente anche dopo il riavvio del sistema.
- Utilizza i metodi spiegati in questo tutorial per i programmi/script che sono destinati ad essere eseguiti all’interno della sessione utente corrente.
Come sempre, se hai domande o commenti, non esitare a inviarli nella sezione commenti qui sotto.
Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/