Valore di ritorno della funzione di timeout


9

Sto usando la funzione di timeout su debian per attendere 5 secondi per il mio script. Funziona benissimo ma il problema che ho è che ho bisogno di un valore di ritorno. Come 1 per il timeout e 0 per nessun timeout. Come farò?

Dai un'occhiata al mio codice:

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
# here i need the return of timeout

Come vedi il mio connect_script -x 'status' restituisce lo stato come una stringa e lo stampa sullo schermo (probabilmente non lo vedi) Lo sfondo di questo problema è che se il server (per connect_script) è bloccato lo script non fa nulla . Ecco perché ho bisogno del timeout per quello. E quando scade il tempo, voglio riavviare il server. Posso farlo, ma non ho idea di come posso vedere se è scaduto o meno ...

Risposte:


19

In caso di timeouttimeout, esce con lo stato 124 ; puoi verificarlo per determinare se lo script è scaduto o meno.


Si, grazie. Mi manca questo nel manuale. @Christopher pubblica una risposta che funziona per me. Non conosco $? sintassi. Quindi entrambe le risposte sono giuste;)
Zero

6

Secondo il manuale ( man timeout):

Sinossi timeout [OPZIONE] NUMBER [SUFFIX] COMANDO [ARG] ...

[...] Se il comando scade, quindi esci con lo stato 124. Altrimenti, esci con lo stato di COMANDO

Combina questo con la consapevolezza che lo stato di uscita o il valore restituito è memorizzato nella variabile $?e abbiamo ...

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
RETVAL=$?

Quindi, è possibile eseguire più elaborazioni in base al valore di $RETVAL, che sarà 124 se scade, o qualche altro valore basato sullo stato di uscita di connect_script.


1

Il valore di ritorno di timeoutdipende dal segnale utilizzato per terminare il figlio.

SIGTERM restituisce 124:

timeout -s SIGTERM 1 sleep 2; echo $?

Ma SIGKILLrestituisce 137:

timeout -s SIGKILL 1 sleep 2; echo $?

Vedi la pagina del manuale:

Se il comando scade e --preserve-status non è impostato, quindi uscire con lo stato 124. Altrimenti, uscire con lo stato di COMANDO. Se non viene specificato alcun segnale, inviare il segnale TERM al timeout. Il segnale TERM interrompe qualsiasi processo che non blocchi o catturi quel segnale. Potrebbe essere necessario utilizzare il segnale KILL (9), poiché questo segnale non può essere catturato, nel qual caso lo stato di uscita è 128 + 9 anziché 124.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.