Вопрос или проблема
Я создал файл setenv.sh в папке CATALINA_BASE, которая находится по адресу /usr/share/tomcat9/, но сам setenv.sh находится в /usr/share/tomcat9/bin
Содержимое setenv.sh:
echo "HELLO IT'S WORKING"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
Я сделал скрипт исполняемым с помощью chmod +x, но когда я перезапускаю Tomcat и проверяю логи, там нет упоминания об этих “флагах” или о выводе echo, который есть в скрипте. Вот что говорят логи:
options used: -Dcatalina.base=/usr/share/tomcat9 -Dcatalina.home=/usr/share/tomcat9 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat9/temp -Djava.util.logging.config.file=/usr/share/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Также у меня нет других скриптов для запуска, таких как catalina.sh и т.д. У меня есть только setenv.sh
Нужно ли мне устанавливать catalina.sh тоже?
Неправильна ли моя папка CATALINA_BASE?
Или, может быть, setenv.sh нужны разрешения для выполнения?
Вероятно, setenv.sh должен находиться в $CATALINA_BASE/bin. Директория bin должна уже существовать.
Ответ или решение
Проблема с выполнением setenv.sh при старте Tomcat 9
Вы столкнулись с ситуацией, когда ваш скрипт setenv.sh
, расположенный в папке /usr/share/tomcat9/bin
, не выполняется при запуске Tomcat. Давайте рассмотрим, как правильно настроить этот скрипт и почему он может не срабатывать.
1. Структура каталогов Tomcat
Прежде всего, убедитесь, что структура вашего Tomcat правильная и соответствует рекомендуемым настройкам. Скрипт setenv.sh
должен находиться в каталоге bin
, который, как вы указали, уже присутствует в вашем CATALINA_BASE
.
Проверьте расположение файлов:
CATALINA_BASE
должен указывать на/usr/share/tomcat9
.- Папка
bin
должна находиться по пути/usr/share/tomcat9/bin
.
2. Содержимое и разрешения файла setenv.sh
Содержимое вашего файла setenv.sh
выглядит верно, однако стоит проверить несколько моментов:
-
Убедитесь, что вы правильно отредактировали файл. Логика скрипта выглядит корректной:
echo "HELLO ITS WORKING" export CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
-
Убедитесь, что файл имеет права на выполнение. Чтобы проверить это, выполните команду:
ls -l /usr/share/tomcat9/bin/setenv.sh
Файл должен иметь права
-rwxr-xr-x
. Если это не так, выполните команду:chmod +x /usr/share/tomcat9/bin/setenv.sh
3. Логи при старте
Если после выполнения вышеуказанных шагов вы все равно не видите вывод от echo
и не замечаете изменений в CATALINA_OPTS
, это может быть связано с тем, что скрипты окружения, используемые для запуска Tomcat, не ссылаются на ваш setenv.sh
.
Программа catalina.sh
, которая инициализирует Tomcat, должна автоматически загружать setenv.sh
из каталога bin
. Однако, убедитесь, что вы запускаете Tomcat с помощью catalina.sh
, например:
/usr/share/tomcat9/bin/catalina.sh start
4. Дополнительные рассуждения
-
Запуск Tomcat: Убедитесь, что вы запускаете Tomcat из правильного контекста. Если вы используете какие-либо специальные системы управления (например, systemd), убедитесь, что они настроены правильно. Иногда службы могут не использовать обычные скрипты запуска.
-
Проверка переменных окружения: После запуска Tomcat, проверьте, установлены ли переменные окружения, добавленные в
setenv.sh
, с помощью команды:echo $CATALINA_OPTS
Это поможет определить, загрузился ли скрипт.
Заключение
Итак, следует проверить следующее:
- Правильное размещение
setenv.sh
в каталогеbin
. - Исполнительные права файла.
- Правильный запуск Tomcat через
catalina.sh
.
Если все вышеуказанное выполнено, ваш скрипт должен сработать без проблем. Если возникнут дополнительные трудности, рассмотрите возможность проверки системных логов для поиска ошибок, связанных с самим Tomcat или его инициализацией.