Arch Linux. У сервлета, по-видимому, были проблемы с совместимостью с openjdk, поэтому я удалил его и установил простой jdk / jre из AUR.
# /etc/rc.d/tomcat7 restart
:: Stopping tomcat7 daemon [FAIL]
:: Starting tomcat7 daemon [BUSY]
Cannot locate Java Home
Добавлено export TOMCAT_JAVA_HOME=/opt/java
к /etc/profile.d/jdk.sh
(и эквивалент под jdk.csh
), перезагрузился. echo $JAVA_HOME
и echo $TOMCAT_JAVA_HOME
оба возвращаются /opt/java
, но все еще без кубиков. Зачем?
Я решил эту проблему на этой странице: https://bugs.archlinux.org/task/24126
Обычно вы должны добавить эти строки в файл /etc/rc.d/tomcat7 под строкой ". /Etc/conf.d/${daemon_name}"
# The JAVA_HOME of the JVM for Tomcat to use
if [ -x /usr/lib/jvm/java-6-openjdk ]; then
TOMCAT_JAVA_HOME=/usr/lib/jvm/java-6-openjdk
elif [ -x /opt/java/ ]; then
TOMCAT_JAVA_HOME=/opt/java/
fi
# Tomcat additional commandline options
CATALINA_OPTS=
Надеюсь это поможет.
открыто catalina.sh
и добавьте следующие строки перед первыми строками кода (но, конечно, ниже shebang)
JAVA_HOME=/opt/java
JRE_HOME=/opt/java/jre
Отрегулируйте путь в соответствии со своими потребностями. Для правильной работы Tomcat не нужно манипулировать какой-либо переменной PATH или постоянной переменной.
Вы что-нибудь получите, набрав в консоли "javac"? Это скажет вам, установлен ли у вас JDK, а не просто JRE. Кроме того, введите команду "which java", чтобы увидеть, с чем связана ваша java. Я никогда не использую ArchLinux, но в Ubuntu и Mint они используют альтернативную систему ссылок, чтобы связать установку Java по умолчанию ... в этом случае я использую инструмент под названием «galternatives» для настройки Oracle Java после его установки.
Я не думаю, что Arch Linux использует альтернативную систему, такую как Ubuntu, но похоже, что добавление java в переменную среды PATH в вашем .bashrc было бы подходящим вариантом, вместо того, чтобы без необходимости редактировать переменные JAVA_HOME и CATALINA_HOME env в сценарий tomcat (поскольку сценарий должен иметь возможность автоматически определять их на основе местоположения двоичных файлов Java).
Вам нужно попробовать сделать:
sudo env
root не должен видеть окружающую среду так, как это делаем мы.
В Руководство Sudoers должен это сказать ...
Поскольку переменные среды могут влиять на поведение программы, sudoers предоставляет средства для ограничения того, какие переменные из среды пользователя наследуются командой, которую нужно запустить.
... и ...
По умолчанию опция env_reset включена. Это приводит к тому, что команды выполняются с минимальной средой, содержащей переменные TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME и SUDO_ в дополнение к переменным из вызывающего процесса, разрешенным параметрами env_check и env_keep.
Мое решение было:
# Create a sudoers extension file and authorize passing JAVA_HOME, M2_HOME, etc into new environment
cd ~/
rm -f neededBy*
echo 'Defaults env_keep+="JAVA_HOME M2_HOME CATALINA_HOME TOMCAT_USER"' > neededByTomCat
chmod 0440 neededByTomCat
sudo cp neededByTomCat /etc/sudoers.d/
Надеюсь, это поможет,
Хасан