Ich habe einen Prozess auf meinem System, der bekanntermaßen abstürzt und geschäftskritisch ist, mein Netzwerkmanager. In jedem Fall muss ich eine Schleife schreiben, die prüft, ob sie ausgeführt wird, und sie startet, wenn sie nicht ausgeführt wird. Folgendes habe ich mir bisher ausgedacht:
#!/bin/bash
while [ true ]; do
if [ -z $(ps aux | grep "[n]m-applet") ]; then
echo "Bugger died, resurrecting..."
nm-applet >/dev/null 2>/dev/null &
disown $!
fi
sleep 3
done
Leider ist dies nicht ganz der richtige Trick, da es den Prozess auch dann zu starten scheint, wenn er nicht erforderlich ist. Nach dem ersten Durchlauf erhalte ich die folgende Fehlermeldung:
line 4: [: too many arguments
Was mache ich hier falsch?
while [ true ]; do ...wird interpretiert alswhile [ -n "true" ]; do ...; Das heißt, es wird geprüft, ob die Zeichenfolge "true" nicht leer ist. Dies ergibt dasselbe Ergebnis wiewhile true; do ...oderwhile :; do ...welches wahrscheinlich das ist, was Sie verwenden wollten. (Dies ist nicht dazu gedacht, Ihre Frage zu beantworten. Die folgenden Antworten machen das richtig. Es ist nur ein