Ein Dienst, der laufen soll – aber nicht läuft. Ein Logfile, das alles weiß.
Deine Aufgabe: herausfinden, was das Logfile dir sagen will.
Auf dem Server läuft eine kleine Java-Statusanwendung: der azubi-statusapp-Dienst. Er ist als systemd-Unit eingerichtet, soll unter Port 8080 antworten und bei Aufruf eine JSON-Antwort liefern. Tut er aber nicht.
Dein Auftrag: Den Dienst zum Laufen bringen – nachhaltig, sauber, dokumentiert.
Das Ziel ist erreicht, wenn dieser Aufruf funktioniert:
curl -s http://localhost:8080/status
…und eine JSON-Antwort mit „status“:„ok“ zurückkommt – lokal auf dem Server und von einem zweiten Rechner aus über die IP-Adresse des Servers.
Es gibt mindestens einen Fehler – möglicherweise mehrere. Ein behobener Fehler kann den nächsten erst sichtbar machen. Das ist kein Versehen, sondern die Realität: In der Produktion steht auch nicht dabei, wie viele Probleme auf dich warten.
Arbeite dich Schritt für Schritt durch. Teste nach jeder Änderung erneut, bevor du weitersuchst.
Dieses Projekt richtet sich an das 2. Lehrjahr. Du kennst systemd, Dateirechte und Firewall bereits. Neu ist der Java-Kontext: JAR-Datei, Konfigurationsdatei, Java-Exceptions im Log. Diese Unterschiede lernst du hier kennen.
Was du nach diesem Projekt kannst – und erklären kannst:
systemctl daemon-reload nach jeder Änderung an einer Unit-Datei zwingend nötig ist – und was passiert, wenn du es vergisstlocalhost) und externem Test erklären und beide durchführen⚠ Keine Holzhammer-Lösungen
Folgende Maßnahmen gelten nicht als Lösung – auch wenn der Fehler danach verschwindet:
systemctl stop firewalld – die Firewall abschaltenroot statt als vorgesehenen Service-User laufen lassen777 setzenFinde die eigentliche Ursache und behebe genau die. Alles andere ist Symptombehandlung.
⚠ Pflicht nach jeder Änderung an der Unit-Datei
Wer die Datei /etc/systemd/system/azubi-statusapp.service ändert, muss danach zwingend ausführen:
systemctl daemon-reload
Ohne diesen Schritt sieht systemd weiterhin die alte Version – ein klassischer Stolperstein, der viel Zeit kostet.
Ein guter Administrator springt nicht direkt in die Konfiguration. Er liest zuerst die Situation – von außen nach innen:
| Schritt | Frage | Womit |
|---|---|---|
| 1. Erreichbarkeit | Kommt überhaupt eine Antwort? Welcher Fehler genau? | curl, Browser |
| 2. Dienststatus | Läuft der Dienst? Ist er aktiviert? Startet er in einer Schleife? | systemctl status |
| 3. Unit-Datei | Hat die Konfigurationsdatei Syntaxfehler? | systemd-eigenes Prüfwerkzeug (Manpage) |
| 4. Logs | Was meldet systemd? Was meldet die Java-Anwendung selbst? | journalctl -xeu azubi-statusapp |
| 5. Dateisystem | Existieren JAR-Datei und Konfiguration? Wer darf sie lesen? Existiert der Service-User? | ls -l, id, getent passwd |
| 6. Netzwerk | Lauscht der Dienst auf dem richtigen Port? Ist der Port von außen erreichbar? | ss -tlnp, firewall-cmd |
Halte diese Reihenfolge ein. Ein Fehler in Schritt 2 kann Fehler in Schritt 4 verbergen. Wer mit Schritt 6 beginnt, repariert möglicherweise das Falsche.
Du musst nicht alle Befehle auswendig kennen. Teil der Übung ist, sie bei Bedarf nachzuschlagen – man <befehl>, <befehl> --help, oder das Ausbilderdokument.
| Bereich | Werkzeuge und Ansatzpunkte |
|---|---|
| HTTP-Antwort testen | curl, Browser |
| Dienststatus | systemctl status, systemctl is-active, systemctl is-enabled |
| Unit-Datei prüfen | Ein systemd-eigenes Analysewerkzeug (Hinweis: Manpage zu systemd-analyze) |
| Logs lesen | journalctl -u azubi-statusapp, journalctl -xeu azubi-statusapp --no-pager |
| Unit-Konfiguration | /etc/systemd/system/azubi-statusapp.service |
| Anwendungskonfiguration | /etc/azubi-statusapp/app.properties |
| Dateien und Rechte | ls -l, ls -la, chmod, chown |
| Benutzer prüfen | id <benutzername>, getent passwd <benutzername> |
| Netzwerk und Ports | ss -tlnp, firewall-cmd --list-ports |
| Java-Prozess | ps aux | grep java |
curl http://localhost:8080/status testet nur die lokale Sicht des Servers. Manche Fehler – insbesondere Firewall-Regeln – werden dabei nicht sichtbar, weil lokaler Datenverkehr anders behandelt wird als Datenverkehr von außen.
Teste am Ende immer auch von einem zweiten Rechner über die IP-Adresse des Servers. Erst dann ist das Ziel wirklich erreicht.
Halte für jeden gefundenen Fehler fest:
Diese Dokumentation ist Teil der Bewertung – nicht nur das Endergebnis.
Kurze mündliche oder schriftliche Zusammenfassung anhand deiner Dokumentation, plus Live-Demo: curl lokal und extern liefert eine JSON-Antwort mit „status“:„ok“.
Vollständige Aufgabenstellung – als LaTeX oder PDF
Das Dokument enthält alle Anforderungen, Spielregeln und den Werkzeugkasten in druckbarer Form.
Lösungshinweise für Ausbilder sind ausschließlich im Ausbilder-Dokument enthalten.
Overleaf (Quelldatei + Live-Vorschau):
→ Overleaf: Azubi-Projekt Java Applikationsserver
↑ Übersicht – Der Weg zur Macht
← Projekt: Webserver
→ Projekt: Freigabeserver
„Das Logfile lügt nicht. Es redet nur manchmal in Rätseln.“
[azubi02@rhel9-kurs ~]$ _