Zwischen Aufgabe Bash: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | = Übungsaufgabe: Webserver- | + | = Übungsaufgabe: Einfacher Webserver-Controller (webctl.sh) = |
| − | *In dieser Aufgabe soll ein Bash-Skript einen | + | *In dieser Aufgabe soll ein kleines Bash-Skript einen Python-Webserver starten, stoppen und überwachen. |
| − | *Dabei sollen | + | *Dabei sollen grundlegende Kontrollstrukturen (case, if, for, while, until, break, continue, exit) verwendet werden. |
== Aufgabenstellung == | == Aufgabenstellung == | ||
*Erstellen Sie ein Skript '''webctl.sh''' mit folgenden Befehlen: | *Erstellen Sie ein Skript '''webctl.sh''' mit folgenden Befehlen: | ||
| − | * start | + | * start |
* stop | * stop | ||
* status | * status | ||
| − | |||
* help | * help | ||
== Anforderungen == | == 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 | + | *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 | + | *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. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | === help | ||
| − | * | ||
| − | |||
| − | |||
| − | |||
| + | == Zusatz == | ||
| + | *Jeder Fehlerfall soll mit einem passenden exit-Code beendet werden. | ||
<!--- | <!--- | ||
| Zeile 55: | Zeile 43: | ||
CMD="$1" | CMD="$1" | ||
| − | |||
PIDFILE="/tmp/web.pid" | PIDFILE="/tmp/web.pid" | ||
| − | |||
case "$CMD" in | case "$CMD" in | ||
help|"") | help|"") | ||
| − | echo "Befehle: start | + | echo "Befehle: start | stop | status | help" |
exit 0 | exit 0 | ||
;; | ;; | ||
esac | esac | ||
| − | command -v python3 >/dev/null 2>&1 | + | if ! command -v python3 >/dev/null 2>&1; then |
| − | |||
echo "python3 nicht gefunden" | echo "python3 nicht gefunden" | ||
| − | exit | + | exit 1 |
fi | fi | ||
case "$CMD" in | case "$CMD" in | ||
start) | start) | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
if [ -f "$PIDFILE" ]; then | if [ -f "$PIDFILE" ]; then | ||
echo "Server läuft bereits" | echo "Server läuft bereits" | ||
| Zeile 91: | Zeile 64: | ||
fi | fi | ||
| − | for i in 1 2 3 | + | for i in 1 2 3; do |
echo "Starte... Versuch $i" | echo "Starte... Versuch $i" | ||
| − | if [ "$i" -eq | + | if [ "$i" -eq 2 ]; then |
| − | python3 -m http.server | + | python3 -m http.server 8000 >/tmp/web.log 2>&1 & |
echo $! > "$PIDFILE" | echo $! > "$PIDFILE" | ||
echo "Webserver gestartet" | echo "Webserver gestartet" | ||
break | break | ||
fi | fi | ||
| + | sleep 1 | ||
done | done | ||
;; | ;; | ||
| Zeile 105: | Zeile 79: | ||
if [ ! -f "$PIDFILE" ]; then | if [ ! -f "$PIDFILE" ]; then | ||
echo "Kein Server gestartet" | echo "Kein Server gestartet" | ||
| − | exit | + | exit 2 |
fi | fi | ||
PID=$(cat "$PIDFILE") | PID=$(cat "$PIDFILE") | ||
| + | COUNT=0 | ||
| − | |||
while kill "$PID" >/dev/null 2>&1; do | while kill "$PID" >/dev/null 2>&1; do | ||
COUNT=$((COUNT+1)) | COUNT=$((COUNT+1)) | ||
| Zeile 126: | Zeile 100: | ||
status) | status) | ||
if [ ! -f "$PIDFILE" ]; then | if [ ! -f "$PIDFILE" ]; then | ||
| − | echo " | + | echo "nicht aktiv" |
exit 0 | exit 0 | ||
fi | fi | ||
| + | |||
PID=$(cat "$PIDFILE") | PID=$(cat "$PIDFILE") | ||
| + | |||
if kill -0 "$PID" >/dev/null 2>&1; then | if kill -0 "$PID" >/dev/null 2>&1; then | ||
echo "läuft" | echo "läuft" | ||
| Zeile 135: | Zeile 111: | ||
echo "PID existiert, aber Prozess tot" | echo "PID existiert, aber Prozess tot" | ||
fi | fi | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
;; | ;; | ||
*) | *) | ||
| − | echo " | + | echo "Unbekannter Befehl" |
| − | exit | + | exit 4 |
;; | ;; | ||
esac | esac | ||
</pre> | </pre> | ||
---> | ---> | ||
Version vom 25. November 2025, 16:00 Uhr
Ü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.