AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 463029
Accepted
vowel-house-might
vowel-house-might
Asked: 2013-01-05 07:57:59 +0800 CST2013-01-05 07:57:59 +0800 CST 2013-01-05 07:57:59 +0800 CST

如何在自动取消设置后为 Tomcat webapp 设置 $LD_LIBRARY_PATH?

  • 772

我有一个需要LD_LIBRARY_PATH设置的 Tomcat webapp。

我正在使用 RHEL6 和 Tomcat6(来自 yum 包管理器),webapp 名为adore-djatoka.

我通过使用提供的导出许多环境变量的脚本启动 tomcat,但它似乎LD_LIBRARY_PATH未设置,我认为这是一项安全功能,因为 init 脚本由用户“ root”运行,但 tomcat 运行为“ 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正在设置和导出,所以我假设它必须被取消设置。

有几个与 webapp 捆绑在一起的脚本来测试它是否正确安装并且它们从命令行运行良好,但它们非常短,它们只是导出环境变量(包括LD_LIBRARY_PATH)并调用 java.lang 。

我试过添加

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?或者在将其设置为空后如何将其重新设置为我想要的?或者我怎样才能阻止 webapp 依赖它?

干杯,

tomcat
  • 3 3 个回答
  • 6803 Views

3 个回答

  • Voted
  1. Cameron Kerr
    2015-08-31T12:42:06+08:002015-08-31T12:42:06+08:00

    您实际需要的是将一个适当的标志放入您的 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
    
    • 2
  2. Best Answer
    vowel-house-might
    2013-01-09T02:42:52+08:002013-01-09T02:42:52+08:00

    我最终通过获取 webapp 的源代码、将所需路径硬编码到相关行、编译和重新部署来解决这个问题。

    有问题的路径只是作为源中的字符串提取出来,因此不需要将其存储在 LD_LIBRARY_PATH 中。

    为了使其更具可移植性,我应该删除硬编码并将其替换为对配置脚本中设置的自定义环境变量的调用。

    这意味着,据我所知,“如何在 setuid 程序范围内取消设置 LD_LIBRARY_PATH 环境变量后”的答案是,“你不能,除非程序本身有一个设施执行后传递此信息”。

    • 0
  3. berhauz
    2018-08-21T05:36:40+08:002018-08-21T05:36:40+08:00

    使用 TOMCAT 7时,只需在 $CATALINA_HOME/conf/tomcat.conf 中设置几行即可解决问题(其中名为 eg 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"
    

    事实上,tomcat.conf 中的每一行 <tag>="<value>" 都变成了“export <tag>=<value>”(例如,对 Tomcat 服务启动脚本进行逆向工程:/etc/init.d/tomcat) .

    您还可以在 /etc/sysconfig/tomcat 中为您可能已配置的所有 TOMCAT 服务全局重载该值。

    因此,如果 tomcat.conf 中的设置看起来没有效果,请检查 /etc/sysconfig/tomcat 可能超载的内容......

    • 0

相关问题

  • jvm性能调优技巧/资源?

  • 使 Jakarta 连接器与 IIS 一起工作时出现问题

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • Hudson 无法在 tomcat5 中启动

  • Tomcat 6 HTTP 日志滚动和清除

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve