2013-05-23 2 views
6

Sto scrivendo una sceneggiatura e vorrei sapere come chiedere a uno dei comandi di uscire dopo pochi secondi. Per es. supponiamo che il mio script esegua 2 comandi dell'applicazione in esso.Come uscire da un comando dopo n secondi?

#!/bin/bash 

for i in `cat servers` 
do 
<command 1> $i >> Output_file #Consistency command 
<command 2> $i >> Output_file #Communication check 
done 

Questi comandi devono verificare la coerenza & comunicazione/dall'applicazione. Voglio sapere come faccio a verificare che il comando 1 & 2 venga eseguito solo per pochi secondi e se non vi è alcuna risposta da un particolare host, passare al comando successivo.

Grazie

+1

ti sembra di essere alla ricerca di questo: [Timeout un comando in bash senza inutili ritardi] (http://stackoverflow.com/questions/687948/timeout- a-command-in-bash-senza-inutile-delay) – devnull

+0

Ho dato un'occhiata @ che, non c'è un modo più semplice ?? Non voglio rendere troppo complicata la mia minuscola sceneggiatura! :) – Marcos

+0

questo è utile per il comando 'display' di imagemagick che non funziona bene con xargs. –

risposta

10

bash coreutils ha 'timeout` comando.

Da manuale:

DESCRIZIONE

Avviare Command, e uccidere, se ancora in esecuzione dopo secondi NUMERO. SUFFIX può essere "s" per secondi (impostazione predefinita), "m" per minuti, "h" per ore o "d" per giorni.

ad esempio:

timeout 5 sleep 6

+0

Sto provando per rpcinfo su solaris ... "timeout 5 rpcinfo -p nome_server" restituisce "comando non trovato", ma c'è una voce di pagina man relativa. – Marcos

+1

'timeout' non è un built-in bash. È fornito da coreutils GNU. – devnull

+0

Quindi come lo uso ?? – Marcos