2009-01-02 20 views
7

Ich habe eine Java-Anwendung konvertieren, um es zu starten ichWie eine vorhandene Java-Anwendung auf einen SYS V-Dienst (Daemon)

java -jar myapp.jar

es zu stoppen Ich benutze STRG + C.

Jetzt brauche ich, dass die Anwendung auf etwas zu konvertieren, die ich mit beginnen:

/etc/init.d/myapp

starten Und ich kann aufhören mit:

/etc/init.d/myapp zu stoppen

Das Problem i Es geht darum, die PID des Prozesses zu speichern, ich glaube, ich habe irgendwo ein Rezept dafür gesehen, ich weiß nicht mehr wo und ich kann es nicht finden.

Ich habe gesehen, dass es ein Projekt namens Java Server Wrapper gibt, aber ich suche nach etwas frei, das Speicherverbrauch nicht begrenzt. Und ich denke, dass diese Arbeit in einem einzigen Bash-Skript gemacht werden könnte.

+0

Was meinst du mit "Speicherverbrauch nicht begrenzt"? Suns JVM-Speicherbelegung ist immer begrenzt (wenn Sie -Xmx nicht angeben, ist * ein Standardwert). – alex

+0

@alex, Vielleicht habe ich diese Seite nicht richtig verstanden http://wrapper.tanukisoftware.org/doc/english/prop-java-maxmemory.html#percent –

+0

Andrea: Sun JVM haben immer ein Speicherlimit. Wenn Sie es nicht explizit festlegen, ist es 64m. Da 64m nicht viel sind, möchten Sie diesen Wert normalerweise immer selbst ändern. Es scheint, dass Java Service Wrapper dieses Limit in Prozent und nicht nur im absoluten Wert setzen kann, wie es normalerweise der Fall ist. –

Antwort

10

Werfen Sie einen Blick auf Apache Commons Daemon.

Es hat 'jsvc' Launcher, der Starten und Stoppen von Java-basierten Daemons (Dienste) unterstützt.

7

Erstens Speichern der PID auf * nix:

$ ./yourprogram & 
$ echo $! > /var/run/yourpid 

yourpid enthält nun yourpgram PID ist, und/var/run ist der richtige Ort, um es zu setzen.

Die oben genannten können in Ihrem "Start" Skript gesetzt werden. Das Skript "stop" kann sich ansehen, um zu wissen, was zu töten ist.

Wenn Sie eleganter werden und Ihre App ordnungsgemäß stoppen möchten, können Sie den Quellcode für Tomcat's org.apache.catalina.startup.Catalina.java zum Implementieren ordnungsgemäßer Shutdown-Hooks lesen.

Zweitens oben "stop" und "Start" Skripte kann dann in /etc/init.d/mystopstartscript gestellt werden:

#!/bin/bash 
# processname: yourprogram 
# pidfile: /var/run/yourpid 

case $1 in 
start) 
     sh /some/where/start.sh 
     ;; 
stop) 
     sh /some/where/stop.sh 
     ;; 
restart) 
     sh /some/where/stop.sh 
     sh /some/where/start.sh 
     ;; 
esac 
exit 0 

Dies ist eine ziemlich home-grown-Lösung, mit Ideen meist genommen aus gut 'ol Tomcat, aber ich hoffe es hilft :)