Ich habe einen kleinen Daemon in Java gebaut und möchte ihn als Dienst unter Unix (z. B. Debian 5) ausführen. Ich habe gelesen, dass es die Möglichkeit gibt, einen Java-Wrapper zu verwenden, aber gibt es keine andere Option, die einfacher zu implementieren ist? Kann ich nicht einfach einen Unix-Befehl wie xxx java -jar program.jar
verwenden?Java läuft als Unix-Dienst
Antwort
Nun, auch wenn Sie Ihr Java-Programm ausführen möchten, wenn Sie Ihrer Shell verlassen aus, ist die folgende die einfachste Art und Weise :
$nohup java -jar program.jar &
erwägen, stderr und stdout als Teil des Befehls umzuleiten. z.B. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP
Sie können einen Cron-Job verwenden, um Ihr Programm zu planen. Sie können auch den Artikel this lesen, um zu erfahren, wie Skripts beim Start ausgeführt werden. Sie können ein Skript schreiben, das Ihr Java-Programm ausführt und es beim Start wie in dem Artikel erwähnt ausführen.
Dies ist gut, wenn Sie ein Programm regelmäßig ausführen möchten. Das Programm sollte dann beendet werden, wenn es fertig ist. – KarlP
Dieser Artikel enthält ein paar nützliche Tricks für eine Java-Anwendung als Daemon ausgeführt wird:
http://barelyenough.org/blog/2005/03/java-daemon/
Alternativ können Sie auch einen Blick auf das Projekt Apache Commons Daemon haben, obwohl dies nativen Code erfordert (Unix und Win32 unterstützt):
Du kannst es als:
normalerweise von Softlinks in/etc/rcX.d
-
java -jar program.jar
Unix-Daemons werden normalerweise von init oder gestartet durch ein Skript in /etc/init.d
oder /etc/rc.d
und begann zu bestimmten Runlevels gestartet. (wo X ist der beabsichtigte "runlevel", der normalerweise 3.
Ich denke, Debian sind mit "upstart", ein init-Ersatz. Es verwendet Konfigurationsdateien in /etc/init
, um Jobs zu definieren, und sie sind ziemlich einfach zu Schreiben Sie das.
Daemons schließt traditionell stdin, sdtout und stderr, und macht eine "Doppelgabel" beim Start, um sich von der Sitzung zu lösen und auch zu signalisieren, dass sie bereit sind, alles zu handhaben Dies ist nicht wirklich notwendig, solange der Daemon nicht vom Terminal gestartet wird
Wenn Sie einen einfachen Shell-Wrapper zum Starten des Programms benötigen, müssen Sie nur eine kleine Shell s schreiben cript:
#!/bin/sh
/full/path/to/java -jar /full/path/to/program.jar
... und es ausführbar machen (chmod 755)
Sie benötigen ein entsprechendes Skript in /etc/init.d
und verknüpfen es mit /etc/rcX.d
Verzeichnisse zu erstellen. Das Skript sollte mindestens start
, stop
und status
Parameter unterstützen. Beim Start sollte java
Befehl mit entsprechenden Argumenten ausgeführt werden, wahrscheinlich über nohup java <arguments> &
. Dann sollten Sie die PID Ihres neu gestarteten Prozesses in der Datei /var/run/yourservice.pid
speichern. stop
Befehl sollte diese PID-Datei lesen und diesen Dienst beenden. Die Details variieren von Distribution zu Distribution, die meisten Distributionen bieten einige Makros, die die Arbeit erleichtern. Am besten schauen Sie sich Beispiele für andere Dienste in /etc/init.d
für Ihre Distribution an.
Zusätzlich: Wenn Ihr Dienst nicht von anderen Computern aus dem Netzwerk zugegriffen wird, aber es einen Port öffnet, machen Sie es mit der Firewall nicht verfügbar.
Wenn Ihr Dienst einige 'empfindliche' Daten verarbeitet, ist es gut, einen weiteren Benutzer hinzuzufügen und einen entsprechenden sudo
Befehl in Ihrer /etc/init.d
Datei aufzurufen.
Unter Debian gibt es ein vorgefertigtes Skript, das Sie kopieren und an Ihre Bedürfnisse anpassen können: '/ etc/init.d/skeleton' – barjak
Auf Linux-Computern gibt es einen Dienstprogrammbefehl, 'chkconfig', der die Verknüpfungen in den Verzeichnissen/etc/rcX für Sie erstellt, indem er spezielle Formatkommentare in Ihrem Skript untersucht. – Raedwald
- 1. Intellij läuft als Benutzer
- 2. Java 1.7 auf OSX 10.9.2 läuft als 1.5?
- 3. Crontab läuft nicht Java
- 4. ausführbare Jar läuft langsamer als Eclipse
- 5. Jenkins läuft nicht als Deamon auf Centos
- 6. java - system.nanoTime() läuft zu langsam
- 7. Sellerie läuft als Daemon stoppt
- 8. läuft iPhone-App als root
- 9. Wie läuft man als Admin?
- 10. läuft höchstens n Java-Threads
- 11. Java Classloading läuft extrem langsam?
- 12. läuft auf Java-Datei läuft wieder die zuvor ausgeführte Datei
- 13. Java: Warum läuft der Haupt-Thread nicht?
- 14. Eclipse läuft alte Version von Java-Programm
- 15. Hudson läuft als Dienst nicht gestartet
- 16. Abfrage läuft länger als Befehlszeitüberschreitung SSIS
- 17. Prüfe, ob Koch als Chef-Solo läuft
- 18. IIS als Dienstkonto mit AzMan läuft
- 19. läuft ruby als Windows exe-Programm
- 20. UnicodeEncodeError nur, wenn als cron-Job läuft
- 21. array.forJeder läuft schneller als native Iteration? Wie?
- 22. Log4Net mit WCF läuft als Dienst
- 23. Sicherheit Docker wie es läuft als Root
- 24. HHVM innerhalb Docker läuft immer als root
- 25. Läuft logn schneller als n^0.3
- 26. Java - Läuft eine Schleife jedes Mal länger?
- 27. App läuft als Debug, stürzt aber als Release
- 28. .NET App läuft entweder als Windows Form oder als Konsolenanwendung
- 29. Warum läuft (wahr) Schleife nur einmal - Java
- 30. Welche Version von Java läuft in Eclipse?
http://commons.apache.org/daemon/jsvc.html –
Überprüfen Sie in serverfault.com/superuser.com. Das System könnte mehr darüber wissen (nohup, inittabs, cron etc) – Jayan