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

时间:2013-09-12 00:53:49

标签: java linux tomcat

我的生产服务器使用System V样式的init脚本运行Linux。

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

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

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

鉴于Java本身无法更改当前的工作目录,那么/usr/share/tomcat6如何成为Tomcat的当前工作目录?它的启动过程在哪里改变了它的cwd?

有问题的Linux是CentOS6。

2 个答案:

答案 0 :(得分:6)

在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来查看任何进程的实际当前目录。

答案 1 :(得分:0)

你看到了变量吗?

  • 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"