Ricerca nel sito web

Come eseguire o ripetere un comando Linux ogni X secondi per sempre


Un amministratore di sistema spesso ha bisogno di eseguire un comando ripetutamente in determinati periodi di tempo. Spesso tali attività possono essere facilmente completate con semplici comandi cron. Nella maggior parte dei casi dovrebbe funzionare, ma il periodo più breve in cui puoi eseguire il comando cron è ogni minuto. Che tu ci creda o no, in molti casi è troppo lento.

In questo tutorial imparerai una semplice tecnica di scripting per monitorare o tenere d'occhio un particolare comando in stato di esecuzione continua simile al comando top (monitorare continuamente il processo e l'utilizzo della memoria) per impostazione predefinita ogni 3 secondi.

Non ci fermeremo a discutere i motivi per cui avresti bisogno di eseguire comandi così spesso. Credo che ognuno abbia ragioni diverse per questo nel lavoro quotidiano o anche nei PC e laptop di casa.

1. Usa il comando orologio

Watch è un comando Linux che ti consente di eseguire periodicamente un comando o un programma e mostra anche l'output sullo schermo. Ciò significa che sarai in grado di vedere l'output del programma in tempo. Per impostazione predefinita, watch riesegue il comando/programma ogni 2 secondi. L'intervallo può essere facilmente modificato per soddisfare le vostre esigenze.

Monitorare l'utilizzo della memoria

“Watch” è estremamente facile da usare, per testarlo puoi avviare subito un terminale Linux e digitare il seguente comando:

watch free -m

Il comando precedente controllerà la memoria libera del sistema e aggiornerà i risultati del comando gratuito ogni due secondi.

Come visto nell'output sopra, hai un'intestazione che mostra informazioni sull'intervallo di aggiornamento (da sinistra a destra), sul comando che viene eseguito e sull'ora corrente. Se desideri nascondere questa intestazione, puoi utilizzare l'opzione -t.

La domanda logica successiva è: come modificare l'intervallo di esecuzione. A tale scopo, puoi utilizzare l'opzione -n, che specifica l'intervallo con cui verrà eseguito il comando. Questo intervallo è specificato in secondi. Quindi supponiamo che tu voglia 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 Impara 15 esempi di comandi cd) dove si trova lo script oppure specifica in altro modo il percorso completo dello script.

Altre opzioni utili del comando watch sono:

  1. -b: crea un segnale acustico se l'uscita del comando è diversa da zero.
  2. -c – Interpreta le sequenze di colori ANSI.
  3. -d – evidenzia le modifiche nell'output del comando.

Monitora gli utenti registrati, il tempo di attività e il carico medio

Supponiamo che tu voglia monitorare gli utenti registrati, il tempo di attività del server e il caricamento medio dell'output in fase continua ogni pochi secondi, quindi utilizzare 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 l'avanzamento del comando di copia

In Linux, durante la copia di file da una posizione a un'altra utilizzando il comando cp, l'avanzamento dei dati non viene mostrato. Per vedere l'avanzamento dei dati copiati, è possibile utilizzare il comando watch comando insieme al comando du -s per verificare 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 ritieni che il processo di cui sopra sia troppo complicato da realizzare, ti suggerisco di utilizzare il comando Copia avanzata, che mostra l'avanzamento dei dati durante la copia.

2. Utilizzare il comando di sospensione

Sleep viene spesso utilizzato per eseguire il debug degli script di shell, ma ha anche molti altri scopi utili. Ad esempio, se combinato con i cicli for o while, puoi ottenere risultati davvero fantastici.

Se non hai esperienza con gli script bash, puoi consultare la nostra guida sui loop bash qui.

Nel caso in cui sia la prima volta che senti parlare del comando "sleep", viene utilizzato per ritardare qualcosa per un periodo di tempo specificato. Negli script, puoi usarlo per dire al tuo script di eseguire il comando 1, attendere 10 secondi e quindi eseguire il comando 2.

Con i cicli precedenti, puoi dire a bash di eseguire un comando, dormire per N numero di secondi e quindi eseguire nuovamente il comando.

Di seguito puoi vedere esempi di entrambi i loop:

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 precedente eseguirà il comando echo e visualizzerà la data corrente, per un totale di 10 volte, con 5 secondi di sospensione 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 modificare i comandi echo e date con i tuoi comandi o script e modificare l'intervallo di sospensione in base alle tue esigenze.

Ciclo while Esempio

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 precedente verrà eseguito finché non verrà terminato o interrotto dall'utente. Può tornare utile se devi eseguire un comando in background e non vuoi contare su cron.

Importante: quando si utilizzano i metodi di cui sopra, si consiglia vivamente di impostare un intervallo sufficientemente lungo da dare tempo sufficiente al comando per terminare l'esecuzione, prima dell'esecuzione successiva.

Conclusione

Gli esempi in questo tutorial sono utili, ma non intendono sostituire completamente l'utilità cron. Spetta a te scoprire quale funziona meglio per te, ma se dovessimo separare l'uso di entrambe le tecniche, direi questo:

  1. Utilizza cron quando è necessario eseguire periodicamente comandi anche dopo il riavvio del sistema.
  2. Utilizzare i metodi spiegati in questo tutorial per programmi/script destinati a essere eseguiti nella sessione utente corrente.

Come sempre, se avete domande o commenti, non esitate a inviarli nella sezione commenti qui sotto.