2009-01-02 15 views
7

tengo una aplicación Java, para iniciarlo utilizoCómo convertir una aplicación Java existente a un servicio SYS V (demonio)

java-jar myapp.jar

para detenerlo Yo uso CTRL + C

ahora tengo que convertir esa aplicación a algo que pueda comenzar con:

/etc/init.d/myapp empezar

Y puedo parar con:

/etc/init.d/myapp detener

El problema i Todo se trata de guardar el PID del proceso, creo que vi en alguna parte una receta para hacer esto, no recuerdo dónde y no puedo encontrarlo.

Vi que hay un proyecto llamado Java Server Wrapper, pero busco algo gratis que no limite el uso de la memoria. Y creo que este trabajo podría hacerse en un único script bash.

+0

¿Qué quiere decir con "no limita el uso de memoria"? El uso de la memoria JVM de Sun siempre es limitado (si no especifica -Xmx, allí * es * un valor predeterminado). – alex

+0

@alex, Tal vez no entendí correctamente esta página http://wrapper.tanukisoftware.org/doc/english/prop-java-maxmemory.html#percent –

+0

Andrea: Sun JVM siempre tiene un límite de memoria. Si no lo configura explícitamente, es 64m. Como 64m no es mucho, siempre quiere cambiar este valor usted mismo. Parece que Java Service Wrapper puede establecer este límite usando porcentaje, y no solo valor absoluto, como es el caso habitual. –

Respuesta

10

Eche un vistazo a Apache Commons Daemon.

Tiene 'jsvc' launcher que admite el inicio y la detención de daemons basados ​​en Java (servicios).

7

En primer lugar, guardar el PID en * nix:

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

yourpid contendrá ahora yourpgram es PID, y/var/run es el lugar adecuado para decirlo.

Lo anterior se puede poner en el script de "inicio". El script "detener" puede mirar a yourpid para saber qué matar.

Si quiere ser más elegante y detener su aplicación correctamente, puede consultar el código fuente de org.apache.catalina.startup.Catalina.java de Tomcat sobre cómo implementar los ganchos de apagado adecuados.

En segundo lugar, por encima de "parada" y "start" secuencias de comandos a continuación, se pueden poner en /etc/init.d/mystopstartscript:

#!/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 

Ésta es una solución bastante de cosecha, sobre todo con las ideas tomadas de bueno 'ol Tomcat, pero espero que ayude :)

Cuestiones relacionadas