L'altro giorno stavo trasferendo un file di grandi dimensioni utilizzando rsync su un altro sistema sulla mia rete locale. Poiché è un file molto grande, ci sono voluti circa 20 minuti per essere completato. Non voglio aspettare molto più a lungo, e inoltre non voglio nemmeno terminare manualmente il processo premendo CTRL+C. Mi chiedevo solo se ci potessero essere modi semplici per eseguire un comando per un tempo specifico e ucciderlo automaticamente una volta scaduto il tempo in sistemi operativi simili a Unix - da qui questo post. Continua a leggere.
Esegui un comando per un tempo specifico in Linux
Possiamo farlo in due metodi.
Metodo 1:utilizzo del comando "timeout"
Il metodo più comune è utilizzare il timeout comando per questo scopo. Per chi non lo sapesse, il comando di timeout limiterà efficacemente il tempo assoluto di esecuzione di un processo. Il comando timeout fa parte del pacchetto GNU coreutils, quindi è preinstallato in tutti i sistemi GNU/Linux.
Diciamo che vuoi eseguire un comando solo per un tempo specifico, quindi ucciderlo automaticamente una volta trascorso il tempo. Per farlo, utilizziamo:
$ timeout <time-limit-interval> <command>
Ad esempio, il comando seguente terminerà dopo 10 secondi.
$ timeout 10s tail -f /var/log/pacman.log
Inoltre, non è necessario specificare il suffisso "s" per secondi. Il comando seguente è lo stesso di sopra.
$ timeout 10 tail -f /var/log/pacman.log
Gli altri suffissi disponibili sono:
- 'm' per minuti,
- 'h' per ore
- 'd' per giorni.
Se esegui questo tail -f /var/log/pacman.log comando, continuerà a funzionare fino a quando non lo termini manualmente premendo CTRL+C. Tuttavia, se lo esegui insieme a timeout comando, verrà ucciso automaticamente dopo l'intervallo di tempo specificato.
Nel caso in cui il comando sia ancora in esecuzione anche dopo il timeout, puoi inviare un kill segnale come di seguito.
$ timeout -k 20 10 tail -f /var/log/pacman.log
In questo caso, se il comando tail è ancora in esecuzione dopo 10 secondi, il comando di timeout gli invierà un segnale di kill dopo 20 secondi e lo terminerà.
Il comando Timeout può essere particolarmente utile durante la risoluzione dei problemi hardware. Ad esempio, esegui il comando seguente per visualizzare tutti i messaggi dal buffer dell'anello del kernel, ma solo per 10 secondi.
$ timeout 10 dmesg -w
Per maggiori dettagli, controlla le pagine man.
$ man timeout
A volte, un particolare programma potrebbe richiedere molto tempo per essere completato e finire per bloccare il sistema. In questi casi, puoi utilizzare questo trucco per terminare automaticamente il processo dopo un determinato periodo di tempo.
Inoltre, considera l'utilizzo di Cpulimit , una semplice applicazione per limitare l'utilizzo della CPU di un processo. Per maggiori dettagli, controlla il seguente link.
- Come limitare l'utilizzo della CPU di un processo in Linux
Metodo 2:utilizzo del programma "Timelimit"
L'utilità Timelimit esegue un dato comando con gli argomenti forniti e termina il processo generato dopo un dato tempo con un dato segnale. In primo luogo, passerà l'avviso segnale e poi, dopo il timeout, invierà il kill segnale.
A differenza dell'utilità di timeout, Timelimit ha più opzioni. Puoi passare un numero di argomenti come killsig, warnsig, killtime, warntime ecc.
È disponibile nei repository predefiniti dei sistemi basati su Debian. Quindi, puoi installarlo usando il comando:
$ sudo apt-get install timelimit
Per i sistemi basati su Arch, è disponibile in AUR. Quindi, puoi installarlo utilizzando qualsiasi programma di supporto AUR come Pacaur , Imballatore , Sì , Yaourt ecc.
Per altre distribuzioni, scarica il sorgente da qui e installarlo manualmente.
Dopo aver installato il programma Timelimit, eseguire il comando seguente per un tempo specifico, ad esempio 10 secondi:
$ timelimit -t10 tail -f /var/log/pacman.log
Se esegui timelimit senza alcun argomento, utilizzerà i valori predefiniti:wartime=3600 secondi , avviso=15 , tempo di riposo=120 , killsig=9 .
Per maggiori dettagli, fare riferimento alle pagine man e al sito web del progetto forniti alla fine di questa guida.
$ man timelimit
E per oggi è tutto. Spero che questo sia stato utile. Altre cose buone in arrivo. Resta sintonizzato!
Ciao!