
Ich habe ein Jar, das ewig läuft (Endlosschleife mit Socket-Listening-Thread) und muss es ständig im Hintergrund laufen lassen. Ein Beispiel wäre: „java -jar test.jar“ Wie mache ich das? Vielen Dank im Voraus!
Antwort1
verschiedene Wege:
Anhängen
&
am Ende. Allerdings wird das Programm dadurch trotzdem beendet, wenn Sie das Terminal schließen, das das Programm gestartet hat.Starten Sie eine
screen
Sitzung und starten Sie das Programm darin. Sie können diescreen
Sitzung trennen und das Terminal schließen. Später können Sie sich wieder mit der Sitzung verbinden und befinden sich wieder auf der Konsole, als ob Sie die ganze Zeit dort gewesen wären. Sie müssen jedoch eine Bildschirmsitzung starten, bevor Sie das Programm ausführen. Wenn Sie das vergessen haben, können Sie nichts dagegen tun.Verwenden Sie
disown
die Jobsteuerung von Ihrer Shell aus. Dadurch wird die Aufgabe von Ihrem TTY getrennt und Ihr Programm wird nicht beendet, wenn das TTY geschlossen wird. Ich glaube jedoch nicht, dass es eine Möglichkeit gibt, einen abgelehnten Job erneut anzufügen.
Antwort2
Eine Befehlszeilenaufforderung, die ich immer für lange Laufzeiten verwendet habe, um Abmeldungen zu überstehen, ist "nohup", also in Ihrem Fall
nohup java -jar test.jar &
Das & ist wichtig, damit Sie eine andere Shell zum Laufen bringen können. Ich glaube nicht, dass dies Neustarts überdauern wird.
Antwort3
Wenn Sie mit "immer" meinen, dass es beim Booten des Rechners gestartet wird, müssen Sie es als Teil der Boot-Skripte starten. Die schmutzige Art, dies zu tun, besteht darin, hinzuzufügen
java -jar test.jar >/dev/null 2>&1 &
in /etc/rc.local
(oder ersetzen Sie es /dev/null
durch Ihre bevorzugte Protokolldatei).
Besser wäre es, ein init.d
Skript zu erstellen, das auf den entsprechenden Runlevels gestartet wird (Sie möchten es vielleicht nicht auf Runlevel 0, 1 oder 6). Auf diese Weise können Sie es auch automatisch neu starten lassen, wenn es abstürzt, und Sie haben eine schönere Schnittstelle, um es vorübergehend zu stoppen.
Kleine Beispiele beihttp://www.howtoforge.com/forums/archive/index.php/t-3628.html
Große Erklärung beihttp://developer.novell.com/wiki/index.php/Writing_Init_Scripts
Antwort4
Sie können unter Linux jede Aufgabe im Hintergrund ausführen, indem Sie an das Ende der Befehlszeile ein '&'-Symbol anhängen, z. B.
java -jar test.jar &