Timeout bei „Neustart des Servicenetzwerks“

Timeout bei „Neustart des Servicenetzwerks“

Ich habe ein Skript auf Fedora 22 laufen, in dem ich im Rahmen eines Problembehandlungsaufrufs das Dienstnetzwerk neu starte service network restart. Ich möchte überprüfen, ob die Ausführung dieses Befehls zu lange dauert. Wenn es zu lange dauert, möchte ich die Meldung „Fehler beim Neustart des Netzwerkdienstes“ ausgeben. Andernfalls möchte ich mit dem Skript fortfahren.

Antwort1

Sie können timeoutden Befehl verwenden, um Ihren Befehl oder Ihr Skript in einem bestimmten Timeout auszuführen. Etwas Ähnliches wie das hier:

timeout 10m command 

Das wartet, bis der Befehl innerhalb von 10 Minuten beendet ist, andernfalls wird er beendet und mit Status 124 beendet. Anschließend können Sie den Beendigungsstatus prüfen timeoutund die entsprechende Meldung darauf basierend drucken. Weitere Informationen finden Sie hier:Timeout-Manpage.

Wenn Sie den langen Befehl nicht beenden möchten, gehen Sie folgendermaßen vor:

(( sleep $TIMEOUT; echo "command took so long!" ) & exec $COMMAND )

Bei TIMEOUT wird die Meldung gedruckt, der Befehl wird jedoch weiterhin ausgeführt.

Antwort2

Wenn Sie die ursprünglichen Systemskripte nicht bearbeiten möchten, können Sie innerhalb des Skripts eine Funktion wie folgt erstellen:

timeoutf(){
    #If hangs 1 minute, dies..
    sleep 1m 
    kill $PPID  
}

timeoutf&

verwandte Informationen