2012-07-13 20 views
11

Tengo un script bash en un cuadro de Linux que ejecuta un archivo Jar. Al iniciar la sesión como un usuario normal no tengo permiso para ejecutar la secuencia de comandos, pero se imprime el siguiente registro:JAVA_HOME no encontrado como Sudo

*INFO * Using JVM found at /opt/jdk6/bin/java 

Cuando trato de utilizar la secuencia de comandos con sudo sin embargo, se da:

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set 

He configurado JAVA_HOME en la misma ruta anterior, puede verlo con echo $JAVA_HOME &, también se establece como una opción dentro del script. Estoy contento de que el script no sea el problema, es un script de control de CQ5 predeterminado & Lo estoy usando en docenas de otros cuadros sin problema. Simplemente no estoy seguro de lo que estoy haciendo mal por encima de & supongo que es algo que me falta volver a configurar Linux?

Cuando ejecuto el comando sudo, ¿tiene acceso al JAVA_HOME que configuré como yo?

+1

Cuál es la salida exacta de 'echo $ JAVA_HOME' tanto como root y como usuario normal? –

+0

Andrew, no tengo acceso como usuario root en la máquina (no en sysadmin), solo como sudoer. Acabo de encontrar el problema aquí: http://unix.stackexchange.com/questions/6127/java-home-not-set-in-script-when-run-using-sudo Sudo estaba eliminando la variable de entorno, lo gestionó con la bandera 'sudo -E' – anotherdave

+1

Creo que depende de la distribución - algunos sudos mantienen envs, otros no – Raz

Respuesta

24

De forma predeterminada, sudo limpiará el entorno de los comandos generados. Pase -E para mantenerla:

sudo -E env 

Compare con:

sudo env 
+0

Gracias amigo, acaba de encontrarlo en unix.stackexchange al mismo tiempo :) – anotherdave

1

"sudo -E" no resolver el problema cuando JAVA_HOME no se exportó. Y cuando se exportó, "sudo" sin -E funciona igual.

Para que pueda agregar export JAVA_HOME=.../jdk<version> en su archivo .bash_profile y .bashrc.

En caso de que se pregunte cuál es la diferencia de .bash_profile y .bashrc, .bash_profile se ejecuta al iniciar sesión (por ejemplo, muestra información de diagnóstico/bienvenida). .bash_rc se ejecuta cuando abre una nueva terminal (por ejemplo, shift-ctrl-T).

Con el fin de ejecutar algunos comandos para ambos casos, se puede poner en el archivo .bashrc, y dejar que .bash_profile Bashrc fuente:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi 
0

siempre se puede simplemente pasar a Java explícitamente como esto:

sudo java -Djava.home=$JAVA_HOME Test