【问题标题】:What determines the current working directory of Tomcat Java process?什么决定了Tomcat Java进程的当前工作目录?
【发布时间】:2013-09-16 05:08:09
【问题描述】:

我的生产服务器使用 System V 风格的初始化脚本运行 Linux。

Tomcat 是通过以 root 用户身份运行 service tomcat6 start 来启动的(service 在 cwd / 下运行 init 脚本)。

然后Tomcat服务一个网页写入new File(".").getAbsolutePath()的结果,显示/usr/share/tomcat6/.

但是 Tomcat 初始化脚本 (/etc/init.d/tomcat6) 没有提及 CWD,也没有任何 cd 命令。

既然Java本身不能改变当前工作目录,那么/usr/share/tomcat6怎么会变成Tomcat的当前工作目录呢?在它的启动过程中哪里改变了它的 cwd?

有问题的 Linux 是 CentOS6。

【问题讨论】:

    标签: java linux tomcat


    【解决方案1】:

    在 CentOS 6 上,Tomcat init.d 脚本通过以下行启动 tomcat:

    $SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security"
    

    $SU 是 /bin/runuser 或 /bin/su,$TOMCAT_USER 通常是“tomcat”,$TOMCAT_SCRIPT 通常是“/usr/sbin/tomcat6”。 “su -” 或 “runuser -” 以指定用户身份从指定用户的主目录运行其命令。所以这个命令将更改为“tomcat”用户的 ID 和主目录,然后运行 ​​/usr/sbin/tomcat6。 tomcat6 脚本最终会自行启动 tomcat。

    tomcat 用户的主目录应该与 CATALINA_BASE 相同。简而言之,这里的“su”或“runuser”命令将当前工作目录设置为 CATALINA_BASE。

    init.d 脚本不是正式的 tomcat 的一部分;它是由包维护者提供的,它可能因系统而异。在我的 Ubuntu 13 系统上,/etc/init.d/tomcat6 包含一个将cd 发送到 $CATALINA_BASE 的命令。

    Tomcat 自己的启动脚本(bin/startup.sh 等)不设置工作目录。当我使用自己的启动脚本直接启动 tomcat 6 或 tomcat 7 时,它只是继承了我运行它的工作目录。

    请记住,在 Linux 上,您可以通过检查 /proc/<pid>/cwd 查看任何进程的实际当前目录。

    【讨论】:

    • 太棒了。我刚刚注意到/etc/passwd 将tomcat 用户主目录定义为/usr/share/tomcat6
    【解决方案2】:

    你看到变量了吗?

    • CATALINA_HOME:这代表您的 Tomcat 安装的根目录。当我们说“此信息可以在您的CATALINA_HOME/README.txt 文件中找到”时,我们的意思是查看您的Tomcat 安装根目录下的README.txt 文件。

    • CATALINA_BASE 或者,可以通过为每个实例定义 $CATALINA_BASE 来为多个实例配置 Tomcat。如果未配置多个实例,CATALINA_BASECATALINA_HOME 相同。

    在文件apache-tomcat-7.0.42/bin/catalina.sh你会看到:

    # Only set CATALINA_HOME if not already set
    [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    
    # Copy CATALINA_BASE from CATALINA_HOME if not already set
    [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
    

    【讨论】:

    • 我当然见过那些环境变量,但没有见过cd $CATALINA_HOME
    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2010-10-24
    • 2011-12-18
    相关资源
    最近更新 更多