什么决定了Tomcat Java进程的当前工作目录?

什么决定了Tomcat Java进程的当前工作目录?,java,linux,tomcat,Java,Linux,Tomcat,我的生产服务器使用SystemV风格的初始化脚本运行Linux Tomcat是以root用户身份运行服务tomcat6 start(服务在cwd/下运行init脚本)启动的 然后,Tomcat提供一个网页来写入新文件(“.”)的结果。getAbsolutePath(),其中显示/usr/share/tomcat6/ 但是Tomcat init脚本(/etc/init.d/tomcat6)没有提到CWD,也没有任何cd命令 既然Java本身无法更改当前的工作目录,那么为什么/usr/share/t

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

Tomcat是以root用户身份运行
服务tomcat6 start
服务
在cwd
/
下运行init脚本)启动的

然后,Tomcat提供一个网页来写入
新文件(“.”)的结果。getAbsolutePath()
,其中显示
/usr/share/tomcat6/

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

既然Java本身无法更改当前的工作目录,那么为什么
/usr/share/tomcat6
会成为Tomcat的当前工作目录呢?在其启动过程中,cwd在何处发生变化


所讨论的Linux是CentOS6。

您看到变量了吗

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

  • CATALINA_BASE
    可选地,通过为每个实例定义$CATALINA_BASE,可以为多个实例配置Tomcat。如果未配置多个实例,
    CATALINA_BASE
    CATALINA_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"

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

$SU - $TOMCAT_USER -c "${TOMCAT_SCRIPT} start-security"
$SU是/bin/runuser或/bin/SU,$TOMCAT_USER通常是“TOMCAT”,而$TOMCAT_脚本通常是“/usr/sbin/tomcat6”。“su-”或“runuser-”作为指定用户从指定用户的主目录运行其命令。因此,该命令将更改为“tomcat”用户的ID和主目录,然后运行/usr/sbin/tomcat6。tomcat6脚本最终会启动tomcat本身

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

init.d脚本不是tomcat的正式部分;它由软件包维护人员提供,在不同的系统中可能会有所不同。在我的Ubuntu13系统上,
/etc/init.d/tomcat6
包含一个命令,用于
cd
到$CATALINA\u BASE

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


请记住,在Linux上,您可以通过检查
/proc//cwd

查看任何进程的实际当前目录,我当然看到了这些env变量,但没有看到
cd$CATALINA_HOME
。太棒了。我刚刚注意到,
/etc/passwd
将tomcat用户主目录定义为
/usr/share/tomcat6