JAVA_HOME не найден как Sudo

У меня есть bash script в ящике Linux, в котором запущен файл Jar. При входе в систему как обычный пользователь у меня нет разрешения на запуск script, но он печатает следующий журнал:

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

Когда я пытаюсь использовать script с Sudo, он дает:

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

Я установил JAVA_HOME на тот же путь выше - можно увидеть его с помощью echo $JAVA_HOME, а также установить в качестве опции в script. Я рад, что script не проблема - это элемент управления CQ5 по умолчанию script, и я использую его на десятках других ящиков без проблем. Просто не знаете, что я делаю неправильно выше, и предполагаю, что мне не хватает новой настройки Linux?

Когда я запускаю команду sudo, имеет ли она доступ к JAVA_HOME, который я настроил как сам?

Ответ 1

По умолчанию sudo очистит среду созданных команд. Пропустите -E, чтобы сохранить его:

sudo -E env

Сравнить с:

sudo env

Ответ 2

"sudo -E" не решила проблему, когда JAVA_HOME не был экспортирован. И когда он был экспортирован, "sudo" без -E работает одинаково.

Итак, вы можете добавить export JAVA_HOME=.../jdk<version> в ваш .bash_profile и .bashrc файл.

В случае, если вы задались вопросом, какая разница в .bash_profile и .bashrc,.bash_profile выполняется при входе в систему (например, покажите какую-либо диагностическую/приветственную информацию)..bash_rc выполняется при открытии нового терминала (например, shift-ctrl-T).

Чтобы запустить некоторые команды для обоих случаев, вы можете поместить их в .bashrc файл и предоставить источник .bash_profile.bashrc:

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

Ответ 3

Вы всегда можете просто передать его в java явно следующим образом:

sudo java -Djava.home=$JAVA_HOME Test