Ich versuche ein Java-Programm als Dienst auszuführen. Meine Anforderungen sind:
1) starte ein Java-Programm beim Start der Maschine
2) Neustart, wenn das Java-Programm abstürzt
3) führe es in einem speziellen Verzeichnis als spezieller Benutzer aus
Anmerkungen zur Seite: Ich kann nicht davon ausgehen, dass dies der einzige Java-Prozess ist, der ausgeführt wird, und es wäre gefährlich, den Dienst zweimal zufällig auszuführen.
Bisher habe ich versucht, es mit Start-Stop-Daemon zu implementieren. Die Anwendung wird jedoch nicht automatisch neu gestartet, wenn sie abstürzt (d. H. Mit einem Beendigungscode ungleich Null endet). Ich denke, es hat etwas zu tun, dass ich den --background verwenden muss und somit kann Start-Stop-Daemon den Exit-Code nicht bestimmen? Hab ich recht? Wie behebe ich dieses Problem richtig? (Ich würde eine Lösung nur mit Systemfunktionalität bevorzugen, wäre es viel einfacher ohne Drittanbieter-Tools aufgrund von Sicherheitsbeschränkungen)
Mein aktuelles Skript (Dummy ist, wie es heißt, eine Dummy-Java-Anwendung, die für immer schläft)
%Vor%Vielen Dank im Voraus!
Ich empfehle DaemonTools + service / chkconfig.
DaemonTools ist möglicherweise bereits auf Ihrer Plattform installiert oder Sie können apt-get ausprobieren. Es startet Ihren Daemon automatisch in maximal 5 Sekunden.
Sie können linux Benutzerhandbuch 8 nach weiteren Informationen über service / chkconfig suchen.
Ich hoffe, das ist hilfreich.
Ich benutze Apache Commons Daemon Tools für diesen ...
JSvc wird Ihren Java-Service-Prozess für Sie neu starten ...
Jsvc verwendet drei Prozesse: einen Launcher-Prozess, einen Controller-Prozess und einen kontrollierten Prozess. Der kontrollierte Prozess ist auch der Haupt-Java-Thread, wenn die JVM abstürzt, wird der Controller sie in der nächsten Minute neu starten. Jsvc ist ein Daemon-Prozess, daher sollte er als root gestartet werden und der Parameter -users ermöglicht das Downgrade auf einen nicht privilegierten Benutzer. Wenn der Parameter -wait verwendet wird, wartet der Launcher-Prozess, bis der Controller "Ich bin bereit" sagt, ansonsten kehrt er nach dem Erstellen des Controller-Prozesses zurück.
JSvc schreibt eine PID-Datei. Der Befehl -stop kann also den laufenden Dienst stoppen.
MitJSvc -user können Sie Ihren Dienst nach dem Start auf einen weniger privilegierten Benutzer herabstufen.
Es ist auch mit ProcRun.exe kompatibel, was unter Windows gut funktioniert.
Ich kann eine andere Lösung empfehlen - Java Service Wrapper Ссылка