Ich habe eine Java-Serveranwendung geschrieben, die auf einer virtuellen virtuell gehosteten Linux-Lösung ausgeführt wird. Die Anwendung läuft ständig und wartet auf Socket-Verbindungen und erstellt neue Handler für diese. Es ist eine serverseitige Implementierung für eine Client-Server-Anwendung.
Ich starte es, indem ich es in das Startskript rc.local des Servers einbinde. Einmal gestartet, weiß ich jedoch nicht, wie ich darauf zugreifen soll, um es zu stoppen, und wenn ich ein Update installieren möchte, muss ich den Server neu starten, um die Anwendung neu zu starten.
Auf einem Windows-PC kann ich für diese Art von Anwendung einen Windows-Dienst erstellen und ihn dann stoppen und starten, wie ich möchte. Gibt es so etwas auf einer Linux-Box, so dass ich diese Anwendung stoppen und neu starten kann, wenn ich sie starte, ohne den Server vollständig neu zu starten?
Meine Anwendung heißt WebServer.exe. Es wird beim Serverstart gestartet, indem es als solches in meine rc.local aufgenommen wird :
java -jar /var/www/vhosts/myweb.com/phpserv/WebServer.jar &
Ich bin ein bisschen ein Noob unter Linux, daher wäre jedes Beispiel für Beiträge willkommen. Ich habe jedoch SSH und vollen FTP-Zugriff auf die Box, um alle Updates zu installieren, sowie Zugriff auf ein Plesk-Panel.
Eine einfache Lösung besteht darin, ein Skript start.sh zu erstellen, das Java über nohup ausführt und dann die PID in einer Datei speichert:
Dann würde Ihr Stoppskript stop.sh die PID aus der Datei lesen und die Anwendung beenden:
Natürlich habe ich einige Details ausgelassen, z. B. zu überprüfen, ob der Prozess vorhanden ist, und zu entfernen,
pid.txt
wenn Sie fertig sind.quelle
Linux Service Init Script werden in gespeichert
/etc/init.d
. Sie können die/etc/init.d/skeleton
Datei kopieren und anpassen und dann aufrufenSiehe http://www.ralfebert.de/blog/java/debian_daemon/ . Es ist für Debian (also auch für Ubuntu), passt aber zu mehr Distribution.
quelle
Vielleicht nicht die beste Entwicklungslösung, aber gut für die allgemeine Verwendung eines Servers für eine LAN-Party oder ähnliches.
Verwenden
screen
Sie diese Option , um Ihren Server vor dem Abmelden zu starten und dann zu trennen. Dadurch wird der Prozess fortgesetzt. Sie können ihn dann jederzeit erneut anhängen.Arbeitsablauf:
Starten Sie einen Bildschirm:
screen
Starten Sie Ihren Server:
java -jar minecraft-server.jar
Abnehmen durch Drücken von :
Ctl-a
,d
Erneut anhängen:
screen -r
Weitere Informationen finden Sie hier: https://www.gnu.org/software/screen/manual/screen.html
quelle
Eine weitere Alternative, die ebenfalls sehr beliebt ist, ist der Java Service Wrapper . Dies ist auch in der OSS-Community sehr beliebt.
quelle
Wenn ich mich auch auf die Spring Boot-Anwendung als Service
systemd
beziehe , würde ich mich für die Version entscheiden, da sie am einfachsten, am wenigsten ausführlich und am besten in moderne Distributionen (und sogar in nicht so moderne wie CentOS 7.x) integriert ist.quelle
Der einfachste Weg ist zu verwenden
supervisord
. Alle Details finden Sie hier: http://supervisord.org/Mehr Info:
/ubuntu/779830/running-an-executable-jar-file-when-the-system-starts/852485#852485
https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps
quelle
Hier ist ein Beispiel für ein Shell-Skript (stellen Sie sicher, dass Sie den MATH-Namen durch den Namen Ihrer Anwendung ersetzen):
quelle
In der Spring Boot-Anwendung als Dienst kann ich die Python-basierte
supervisord
Anwendung empfehlen . Weitere Informationen finden Sie in dieser Frage zum Stapelüberlauf. Es ist wirklich einfach einzurichten.quelle
supervisord
ist großartig, für diejenigen, die es nicht wissen, es erlaubt Überwachungsdienste (was sein mussforeground
- nichtdaemonized
), es wird dann Dienste automatisch neu starten (und kann Benachrichtigungen per E-Mail senden, wenn Neustarts über Plugins erfolgen)Andere Antworten liefern je nach Plattform benutzerdefinierte Skripte und Setups. Zusätzlich zu diesen sind hier die ausgereiften Spezialprogramme, die ich kenne:
quelle
Sie können Thrift Server oder JMX verwenden , um mit Ihrem Java-Dienst zu kommunizieren.
quelle
Aus dem Spring Boot-Referenzhandbuch
Lesen Sie weiter, um zu erfahren, wie Sie einen bereitgestellten Dienst sichern können.
Nachdem ich wie geschrieben vorgegangen bin, habe ich festgestellt, dass mein Dienst nicht mit dieser Fehlermeldung in den Protokollen gestartet werden kann : start-stop-daemon: nicht erkannte Option --no-close . Und ich habe es geschafft, es zu beheben, indem ich eine Konfigurationsdatei
/var/myapp/myapp.conf
mit dem folgenden Inhalt erstellt habequelle
Ich habe Netty Java-Anwendung und ich möchte es als Dienst mit systemd ausführen. Leider stoppt die Anwendung, egal welchen Typ ich verwende. Am Ende habe ich Java Start in Bildschirm eingewickelt. Hier sind die Konfigurationsdateien:
Bedienung
Anfang
Ab diesem Punkt können Sie verwenden
systemctl [start|stop|status] service
.quelle
Um Java-Code als Daemon (Dienst) auszuführen, können Sie einen JNI-basierten Stub schreiben.
http://jnicookbook.owsiak.org/recipe-no-022/
für einen Beispielcode, der auf JNI basiert. In diesem Fall dämonisieren Sie den Code, der als Java gestartet wurde, und die Hauptschleife wird in C ausgeführt. Es ist jedoch auch möglich, die Dienstschleife des Hauptdämons in Java einzufügen.
https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo029
Viel Spaß mit JNI!
quelle
Sie können ein einfaches Stoppskript schreiben, das nach Ihrem Java-Prozess sucht, die PID extrahiert und kill aufruft. Es ist nichts Besonderes, aber es ist einfach. So etwas kann zunächst hilfreich sein:
quelle
pkill nameofprocess
das Gleiche?Es ist möglich, den Krieg als Linux-Dienst auszuführen, und Sie möchten möglicherweise Ihre Datei pom.xml vor dem Packen erzwingen, da einige Distributionen im automatischen Modus möglicherweise nicht erkennen. Fügen Sie dazu die folgende Eigenschaft in das Spring-Boot-Maven-Plugin-Plugin ein.
Als nächstes richten Sie Ihre init.d ein mit:
und du wirst laufen können
Es gibt viele andere Optionen, die Sie in der Spring Boot-Dokumentation finden , einschließlich des Windows-Dienstes.
quelle