Eigenes Java-Server-Programm unter Linux steuern?

Status
Nicht offen für weitere Antworten.

McFraggle

Mitglied
Hallo!
Ich habe ein Java-TCP/IP-Server.
Der soll unter Linux laufen.

Jetzt möchte ich ihn beim Starten in den Hintergrund gabeln und die Möglichkeit haben, ihn jederzeit stoppen oder neustarten zu können.
Im Grunde möchte ich sowas wie die Deamon-Steuerung unter Linux mit den init.d-Skripten.

Wie kann ich das möglichst elegant bewerkstelligen?

Danke für jede Anregung! :)
 

Kim Stebel

Bekanntes Mitglied
"startserver &" ruft startserver im hintergrund auf.
Dann mit "ps ax" die PID rausfinden und schließlich "kill PID"..
 

HoaX

Top Contributor
oder da es ein server ist auf diesen verbinden und ihm das kommande "beenden dich" schicken
 

NTB

Bekanntes Mitglied
oder einen zusätzlichen Steuerport implementieren, über den Du ihn stoppen kannst.
 

McFraggle

Mitglied
@HoaX, @NTB:
Hm, ja die Ansätze hatte ich auch, ich dachte nur, es gäbe vielleicht etwas Vorgedachtes in den Bibliotheken...

@Kim Stebel:
Wenn ich startserver & in einer Shell aufrufe und dann die Shell beende, stirbt doch auch der startserver-prozess, oder nicht? Mit dem "&" forke ich einen Prozess doch nicht richtig in den Hintergrund (als vollwertigen deamon), oder liege ich da falsch?

Mit kill PID wiederum töte ich einen Prozess doch unerbittlich, ohne ihm die Möglichkeit zu geben, sich sauber zu beenden, oder? Das wäre für einen Server-Prozess auch nicht unbedingt schön, der laufende Requests erst noch abhandeln soll und eventuell Semaphoren zurücksetzen muss und Ähnliches; oder liege ich da auch falsch? Kann ich das "kill" in einem Java-Programm quasi als Event abfangen und behandeln?


Danke schon mal an Euch drei!!!
 

Kim Stebel

Bekanntes Mitglied
Wenn ich startserver & in einer Shell aufrufe und dann die Shell beende, stirbt doch auch der startserver-prozess, oder nicht? Mit dem "&" forke ich einen Prozess doch nicht richtig in den Hintergrund (als vollwertigen deamon), oder liege ich da falsch?
Da liegst du falsch. Probier es halt aus...wenn du die shell zumachst geht dann nur Standard-output ins nirvana, sofern nicht umgeleitet.

Mit kill PID wiederum töte ich einen Prozess doch unerbittlich, ohne ihm die Möglichkeit zu geben, sich sauber zu beenden, oder? Das wäre für einen Server-Prozess auch nicht unbedingt schön, der laufende Requests erst noch abhandeln soll und eventuell Semaphoren zurücksetzen muss und Ähnliches; oder liege ich da auch falsch? Kann ich das "kill" in einem Java-Programm quasi als Event abfangen und behandeln?
Ja kannst du:
Code:
Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { //aufräumen.... }
});

"Unerbittlich" tötest du nur mit kill -9
 

Hilefoks

Bekanntes Mitglied
Kim Stebel hat gesagt.:
Wenn ich startserver & in einer Shell aufrufe und dann die Shell beende, stirbt doch auch der startserver-prozess, oder nicht? Mit dem "&" forke ich einen Prozess doch nicht richtig in den Hintergrund (als vollwertigen deamon), oder liege ich da falsch?
Da liegst du falsch. Probier es halt aus...wenn du die shell zumachst geht dann nur Standard-output ins nirvana, sofern nicht umgeleitet.
Nein - er hat recht... "Probier es halt aus..." ;-)

Durch das & wird die Shell angewiesen den Prozess in einer Subshell zu starten... wird die Shell beendet, werden auch alle Kinder getötet. Um das zu verhindern kann man ein Programm aber mit nohup starten:
Code:
nohup programm &
Aber auch das ist nur ein Hack und kein echter Unix-Daemon. Es gibt aber den JSR 96 der sich um dieses Problem kümmert. Daneben gibt es noch andere Projekte, wie z.B. http://wrapper.tanukisoftware.org/doc/english/introduction.html, die ebenfalls eine Lösung anbieten.

MfG,
Hilefoks
 

HoaX

Top Contributor
wenn du dein xterm einfach mit "alt+f4" oder wie auch immer einfach beendest wird meist die shell nicht korrekt beendet und daher auch die darin gestarteten jobs beendet - ist für die shell im xterm quasi wie ein SIGKILL. wenn du die shell mit logout oder exit beendest, dann laufen die auf jedenfall weiter (zumindest bei der bash, abweichung bei anderen shells sind gut möglich, wenn auch unwahrscheinlich)
 

McFraggle

Mitglied
Hm, scheint ja ein diskussionswürdiges Thema zu sein, wenn ich Euren Links mal so folge...
Bin mal gespannt wo unsere (meines Kollegen und meine) Entscheiung hinfällt.... Im Moment tendiere ich zu dem extra Service-Port für diverse Befhle (die ich dann beispielsweise aus einem Shell-Skript via netcat aufrufen könnte) und der Implementierung eines ShutdownHooks für den Notfall....
Vorerst mal wieder ein Danke an Euch!
 

HoaX

Top Contributor
Hilefoks hat gesagt.:
Durch das & wird die Shell angewiesen den Prozess in einer Subshell zu starten... wird die Shell beendet, werden auch alle Kinder getötet. Um das zu verhindern kann man ein Programm aber mit nohup starten:
Code:
nohup programm &

& startet keine subshell sondern das programm als hintergund process der shell, eine subshell wird idR mit backticks bzw $( ... ) gestartet. im gegensatz zu subshells kannst du jobs kontrollieren, siehe fg, bg, jobs, disown, ...

btw lässt sich das verhalten beim beenden bei einigen shells mittels entsprechender shopts anpassen

ich würde den shutdownhook auf jeden fall implementieren, dann kann man den server auch mal getrost mit strg+c abbrechen und er wird vernünftig beendet
 
G

Guest

Gast
Wie wär's mit OSGi? Die Declarative Services und die Console von z.B. Equinox scheinen genau das zu sein,
was du suchst. In diesem Bereich ist auch eine interessante Entwicklung zu erwarten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Installationsroutine für eigenes Java-Programm Allgemeine Java-Themen 3
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
B eigenes Consumer Interface Allgemeine Java-Themen 0
Thallius Eigenes Message Center erstellen Allgemeine Java-Themen 3
M eigenes Seekarten-Tool (oder PlugIn?) Allgemeine Java-Themen 2
Z LanguageTool in eigenes GUI einbetten Allgemeine Java-Themen 0
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
O log4j - eigenes Log für einzelne Klasse Allgemeine Java-Themen 5
M Eigenes Eventsystem Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Swing Eigenes Button-design Allgemeine Java-Themen 2
S import meine.eigenes.import Allgemeine Java-Themen 6
I Eigenes Mail-Programm schreiben Allgemeine Java-Themen 21
N eigenes Bildformat Allgemeine Java-Themen 2
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
M Erstes eigenes Projekt Allgemeine Java-Themen 5
D Simples eigenes Logfile Allgemeine Java-Themen 18
J Eigenes Objekt sichern Allgemeine Java-Themen 9
R Eigenes Objekt - clone() Allgemeine Java-Themen 2
G eigenes ChangeEvent Allgemeine Java-Themen 4
G eigenes Actionevent Allgemeine Java-Themen 8
G eigenes dateiformat als zip Allgemeine Java-Themen 2
M Eigenes Synchronisationstool? Allgemeine Java-Themen 2
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
S eigenes Zahlensystem? Allgemeine Java-Themen 5
K Eigenes Protokoll (abc:[url]http://abc.de[/url]) Allgemeine Java-Themen 2
A Eigenes jar file in projekt einbinden Allgemeine Java-Themen 4
B eigenes look and feel Allgemeine Java-Themen 11
K eigenes Tool jar - maskieren der Methoden Allgemeine Java-Themen 3
T eigenes Browser Plugin Allgemeine Java-Themen 6
T Eigenes Installationsprogramm Allgemeine Java-Themen 17
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben