2012-08-30 13 views
7

Estoy escribiendo una aplicación que aprovecha jsvc para iniciar un servicio Java como daemon. Necesito usar algo como jsvc porque mi aplicación utiliza puertos por debajo de 1024 y, sin embargo, me gustaría no ejecutarlo como root para que los archivos creados sean propiedad de otro usuario. También me gustaría mantener las dependencias y la configuración al mínimo para que todas las necesidades del cliente sean una JVM y el binario jsvc instalado.No se puede encontrar la casa de Java

Sin embargo, parece que jsvc tiene una captura importante; que no puede detectar la carpeta de inicio de Java en un sistema dado operativo Unix, que es muy frustrante:

$ ./startup.sh 
Cannot locate Java home 

he sido capaz de solucionar el problema en Ubuntu, al menos, estableciendo manualmente el directorio de inicio de JVM:

jsvc ... -home /usr/lib/jvm/default-java/ ... 

¿hay alguna manera de determinar el directorio de inicio de Java dinámicamente a partir de una secuencia de comandos Bash para que pueda hacer este trabajo en la mayor parte Unix/Linuxes? Yo sería capaz de dormir mucho mejor por la noche haciendo algo como:

JAVA_HOME="$(...)" 

jsvc ... -home "$JAVA_HOME" ... 

... en lugar de la codificación dura para cada sistema operativo individual. ¿Hay alguna manera de que, dado un binario java, pueda encontrar el directorio de inicio de su JVM/JRE?

+0

posible duplicado de [¿Cuál es el objetivo correcto para la variable de entorno JAVA_HOME para una distribución Linux OpenJDK basada en debian?] (Http://stackoverflow.com/questions/663658/what-is-the-correct-target- for-the-java-home-envrionment-variable-for-a-linux-op) – paulsm4

+1

No es un duplicado; Intento ubicar Java en mi casa genéricamente, no solo para distribuciones Debian sino también para Red Hat, OSX y otras Linux/Unixes. –

+0

Lea el enlace SO. Especialmente las partes sobre "update-java-alternatives/update-alternatives". – paulsm4

Respuesta

5

No estoy seguro si esto funciona a través de * nix, pero se encontró esta solución:

JAVA_HOME="$(readlink -f "$(which java)" | sed "s:bin/.*$::")" 

Lo he probado en Ubuntu y funciona, sin embargo, no funciona para OSX.

+0

Gracias, hombre, funcionó en CentOS 6.5 :) –

0

Uso dirname y which comandos para encontrar el directorio bin de Java:

echo `dirname \`which java\`` 
JAVA_HOME=`dirname \`which java\`` 

... Sólo funciona si Java ya en el $PATH es.

+1

Eso devuelve '/ usr/bin', que sin dudas (y de forma reproducible) falla. Como 'which java' devuelve'/usr/bin/java', eso es lo que obtengo. –

3

Mi solución fue compilar el código fuente nativo de Linux como principal jsvc dice en http://commons.apache.org/proper/commons-daemon//jsvc.html

Aquí está mi procedimiento paso a paso

Descargar www.fightrice.com/mirrors/apache/commons/daemon /source/commons-daemon-1.0.13-src.tar.gz

Una vez que extrae el archivo, vaya a ...../commons-daemon-1.0.13-src/src/native/unix

en la terminal como una raíz hacer el seguimiento debido:

$ soporte/buildconf.sh

$ ./configure --with-java =/usr/lib/jvm/java-default

$ hacen

prueba generada binaria jsvc aplicación

$ ./jsvc -help

funciona! limpiamente.

0

Otra forma es:

type -p java 

esperaba esto para devolver la carpeta de instalación de JAVA correcta.

Cuestiones relacionadas