【问题标题】:Environment variables in Ubuntu Tomcat, Apache and JavaUbuntu Tomcat、Apache 和 Java 中的环境变量
【发布时间】:2014-09-25 15:53:19
【问题描述】:

我有一个在 Windows 环境中运行的 java web 应用程序,我想将它移动到 Ubuntu 系统。 在 Windows 中,我使用环境变量来存储主路径:

MAIN_PATH=C:\test

此变量用于许多配置文件和应用程序中,例如:

  • Apache 和 Tomcat 配置文件
  • 应用程序日志记录配置 (log4j)
  • Java 应用程序本身由 System.getEnv(...)

示例:

tomcat 配置

 <Host name="localhost"  appBase="${MAIN_PATH}/webapps" unpackWARs="true" autoDeploy="true">

apache 虚拟主机

<VirtualHost *:80>
    DocumentRoot "${MAIN_PATH}/www"
    ServerName testmain
    <Directory "${MAIN_PATH}/www">
...

我在 ubuntu 中找不到设置它的方法,我试过这些地方:

/etc/enviroment
/etc/profile

export MAIN_PATH=/opt/test 在 /etc/init.d/tomcat7.sh

所有这些解决方案都不起作用或仅在我的一个要求中起作用(仅在服务器配置中,但在应用程序中不起作用,反之亦然)。

在所有这些情况下都使用 Windows 全局环境变量吗?

【问题讨论】:

    标签: java apache tomcat ubuntu environment-variables


    【解决方案1】:

    你检查过 ubuntu/linux 文档吗?这很简单。

    参考:https://help.ubuntu.com/community/EnvironmentVariables

    这对我来说非常有效。

    • $ nano /etc/environment(或您想使用的任何文件编辑器)
    • 将“export MAIN_PATH=/opt/test”添加到文件并保存
    • $ source /etc/environment
    • $ echo $MAIN_PATH
    • 输出:/opt/test

    【讨论】:

    • 确保在更改这些文件时重新启动计算机,或者您可以从 bash IE 对文件运行“源”命令:$source /etc/environment
    • 我试了又试...没有办法将变量导出到一个文件中的所有服务。我只能在每个服务的 init.d 脚本上添加“export var ...”来运行它。你能告诉我把环境变量放在哪里吗?
    • 已编辑答案。对我来说效果很好。
    • 您的 init.d 脚本可能会覆盖您的环境变量。
    • @Hal50000 这正是我的问题...... tomcat 和 apache 似乎都有自己的环境变量。
    【解决方案2】:

    我建议您将应用程序的每一层的环境变量分开。例如,将所有内容放在一个地方似乎是有道理的,但我认为为 Apache 和 Tomcat 共享一个配置目录并不是一个好的设计。两者都有配置文件的标准位置(例如,$CATALINA_HOME/conf)。

    我认为您不会在 Apache 上使用 log4j,所以为什么将它放在与 Apache 共享的自定义目录中。将它放在您的 webapp 内的 conf 文件夹中,或者放在前面提到的顶级 conf 目录中。也许你会在 Tomcat 上拥有多个 webapp——在这种情况下,在特定的 webapp 目录中包含日志配置文件会更有意义。

    在进程中包含环境变量也更简洁。它们不会混淆全局环境变量。例如,当您启动 Tomcat 时,setenv.sh 脚本会运行并仅为运行 Tomcat 的 java 进程设置所有环境变量。

    【讨论】:

    • 如果这是我会考虑的唯一解决方案,但是我的应用程序有很多服务,每个服务都应该将日志写入特定文件夹,会在另一个特定文件夹中找到源,所以在 Windows 环境中我我在应用程序文件夹中使用 evniroment 变量,所有内容都存储在这里,apache、tomcat 等将指向该文件夹。请通过一些配置示例查看我编辑的问题
    • 显然我没有在 Apache 中使用 log4j,但我需要将 apache 日志路径更改为我的自定义路径(与 log4j 相同)。
    • 我不相信您在配置中使用环境变量会有所收获。比如你不需要在Tomcat的server.xml中使用绝对路径,appBase是相对的。即,只是“webapps”。我的 Windows 开发盒和 RHEL 生产机器上都有这个。我会将 log4j 日志和 apache 日志保存在它们各自的父目录中,而不是在同一个目录中。
    • 你有一个很好的例子,我想要一个到 ${MAIN_PATH}/webapps 的绝对 tomcat webapps 路径(请参阅我的问题),因为对我来说管理日志、备份和更新非常容易如果所有内容都存储在一个文件夹中。
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2013-09-12
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多