Назад | Перейти на главную страницу

Как установить $ LD_LIBRARY_PATH для веб-приложения Tomcat после его автоматического отключения?

У меня есть веб-приложение Tomcat, которому требуется LD_LIBRARY_PATH быть установленным.

Я использую RHEL6 и Tomcat6 (из диспетчера пакетов yum), веб-приложение называется adore-djatoka.

Я запускаю tomcat с помощью прилагаемого скрипта, который экспортирует ряд переменных среды, но похоже, что LD_LIBRARY_PATH не установлен, я думаю, это функция безопасности, поскольку сценарий инициализации запускается пользователем "root"но кот работает как"tomcat".

Когда я перезапускаю tomcat, я вижу в файле журнала следующую строку:djatoka.log"

2013-01-04/10:25:04.118/EST [main] DEBUG envParams: LD_LIBRARY_PATH=null | null/kdu_compress

Я прочитал, что говорит мне, что приложение ожидает, что LD_LIBRARY_PATH будет установлен, но обнаруживает, что он равен нулю, и, следовательно, он будет искать kdu_compress в каталоге null/.

Я засорил скрипт запуска echo так что я вижу это LD_LIBRARY_PATH устанавливается и экспортируется, поэтому я предполагаю, что он не установлен.

В комплект поставки веб-приложения входит пара скриптов для проверки правильности установки, и они отлично работают из командной строки, но они очень короткие, они просто экспортируют переменные среды (включая LD_LIBRARY_PATH) и вызовите java.

Я пробовал добавить

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"
export LD_LIBRARY_PATH

к /usr/share/tomcat6/bin/setenv.sh

Я пробовал добавить

LD_LIBRARY_PATH="/opt/adore-djatoka-1.1/lib/Linux-x86-64"

в `/etc/tomcat6/tomcat6.conf

LD_LIBRARY_PATH уже экспортирован в сценарий запуска, который продолжает вызывать /etc/init.d/tomcat6 [start/stop/restart]

Я новичок в нескольких предметах здесь, поэтому я также буду признателен за некоторые рекомендации о том, как лучше понять, где искать дальше или какую информацию было бы полезно опубликовать. Я уже читал "почему LD_LIBRARY_PATH плохой"

Итак, мой вопрос в том, как я могу запустить tomcat, чтобы он не устанавливал LD_LIBRARY_PATH обнулить? или как я могу переустановить его на то, что я хочу, после того, как он был установлен на null? или как я могу сделать так, чтобы веб-приложение не зависело от него?

Привет,

На самом деле вам нужно было поставить соответствующий флаг в JAVA_OPTS (что немного противоречит здравому смыслу).

В поле RHEL поместите это в / etc / sysconfig / tomcat6 или /etc/tomcat6/tomcat.conf

JAVA_OPTS="-Xminf0.1 -Xmaxf0.3 -Xms1536m -Xmx1536m -XX:MaxPermSize=512m -Djava.awt.headless=true -DdjatokaUri=//thing.example.com/adore-djatoka -Dkakadu.home=/opt/adore-djatoka/bin/Linux-x86-64 -DLD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64"

Вы можете проверить, что это установлено в Java, используя следующее:

# tr '\0' '\n' < /proc/$(pidof java)/environ

а также увидеть в журнале djatoka следующее:

2015-08-31/08:33:01.683/NZST [http-bio-8080-exec-1] DEBUG envParams: LD_LIBRARY_PATH=/opt/adore-djatoka/lib/Linux-x86-64 | /opt/adore-djatoka/bin/Linux-x86-64/kdu_expand

Или вы можете просто установить его глобально (в таком файле, как /etc/ld.so.conf.d/adore-djatoka)

# echo "/opt/adore-djatoka/lib/Linux-x86-64" > /etc/ld.so.conf.d/adore-djatoka
# ldconfig

С TOMCAT 7, просто установив пара строк в $ CATALINA_HOME / conf / tomcat.conf решила проблему (где библиотека с именем, например, Crypto становится libCrypto.so):

JAVA_OPTS="-Djava.library.path=/usr/share/tomcat/sharedLibs"
# NOTE: the above instructs only the JVM, the next is ALSO required by native libs to load dependent native libs! 
LD_LIBRARY_PATH="/usr/share/tomcat/sharedLibs"

Дело в том, что каждая строка <tag> = "<value>" в tomcat.conf становится "export <tag> = <value>" (например, реконструируйте сценарий запуска службы Tomcat: /etc/init.d/tomcat) .

Вы также можете перегрузить значение глобально в / etc / sysconfig / tomcat для всех служб TOMCAT, которые вы, возможно, настроили.

Следовательно, если настройки в tomcat.conf выглядят неэффективными, проверьте, что / etc / sysconfig / tomcat может перегружать ...

В конце концов я решил эту проблему, взяв исходный код веб-приложения, жестко закодировав требуемый путь в соответствующей строке, скомпилировав и повторно развернув.

Рассматриваемый путь был просто извлечен как строка в источнике, поэтому не требовалось, чтобы он хранился в LD_LIBRARY_PATH.

Чтобы сделать его более переносимым, я должен удалить жесткое кодирование и заменить его вызовом пользовательской переменной среды, установленной в сценарии конфигурации.

Это означает, насколько мне известно, ответ на вопрос «Как установить переменную среды LD_LIBRARY_PATH после того, как она не установлена ​​в рамках программы setuid», будет: «Вы не можете, если сама программа не имеет средства для передача этой информации после выполнения ".