一尘不染

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

tomcat

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

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

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

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

鉴于Java本身无法更改当前工作目录,那么/usr/share/tomcat6Tomcat的当前工作目录又如何呢?在启动过程中在哪里更改其cwd?

有问题的Linux是CentOS6。


阅读 282

收藏
2020-06-16

共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

2020-06-16