Zwischen Aufgabe Bash
Übungsaufgabe: Einfacher Webserver-Controller (webctl.sh)
- In dieser Aufgabe soll ein kleines Bash-Skript einen Python-Webserver starten, stoppen und überwachen.
- Dabei sollen grundlegende Kontrollstrukturen (case, if, for, while, until, break, continue, exit) verwendet werden.
Aufgabenstellung
- Erstellen Sie ein Skript webctl.sh mit folgenden Befehlen:
- start
- stop
- status
- help
Anforderungen
start
- Prüfen Sie mit if, ob python3 installiert ist, sonst exit 1.
- Starten Sie den Webserver mit: python3 -m http.server 8000 &
- Speichern Sie die PID in /tmp/web.pid.
- Verwenden Sie eine kleine for-Schleife (3 Versuche), die beim zweiten Versuch mit break abbricht.
stop
- Wenn die PID-Datei fehlt → Fehlermeldung und exit 2.
- Mit einer while-Schleife kill auf die PID ausführen, solange der Prozess noch läuft.
- Jeden zweiten Schleifendurchlauf mit continue überspringen.
- Wenn der Prozess beendet ist → PID-Datei löschen.
status
- Wenn PID-Datei vorhanden → prüfen, ob der Prozess läuft.
- Wenn ja: "läuft" ausgeben.
- Wenn nein: "nicht aktiv".
help
- Liste der Befehle anzeigen.
Zusatz
- Jeder Fehlerfall soll mit einem passenden exit-Code beendet werden.
echo "python3 nicht gefunden" exit 1
fi
case "$CMD" in
start)
if [ -f "$PIDFILE" ]; then
echo "Server läuft bereits"
exit 3
fi
for i in 1 2 3; do
echo "Starte... Versuch $i"
if [ "$i" -eq 2 ]; then
python3 -m http.server 8000 >/tmp/web.log 2>&1 &
echo $! > "$PIDFILE"
echo "Webserver gestartet"
break
fi
sleep 1
done
;;
stop)
if [ ! -f "$PIDFILE" ]; then
echo "Kein Server gestartet"
exit 2
fi
PID=$(cat "$PIDFILE") COUNT=0
while kill "$PID" >/dev/null 2>&1; do
COUNT=$((COUNT+1))
if [ $((COUNT % 2)) -eq 0 ]; then
continue
fi
echo "Beende Prozess..."
sleep 1
done
rm -f "$PIDFILE" echo "gestoppt" ;;
status)
if [ ! -f "$PIDFILE" ]; then
echo "nicht aktiv"
exit 0
fi
PID=$(cat "$PIDFILE")
if kill -0 "$PID" >/dev/null 2>&1; then
echo "läuft"
else
echo "PID existiert, aber Prozess tot"
fi
;;
*) echo "Unbekannter Befehl" exit 4 ;;
esac
--->