我的生产服务器使用System V样式的初始化脚本运行Linux。
通过service tomcat6 start以root用户身份运行(service在cwd下运行init脚本/)来启动Tomcat 。
service tomcat6 start
service
/
Tomcat然后提供一个网页来写入的结果new File(".").getAbsolutePath(),该结果显示/usr/share/tomcat6/.
new File(".").getAbsolutePath()
/usr/share/tomcat6/.
但是Tomcat的初始化脚本(/etc/init.d/tomcat6)没有提到CWD,也没有任何cd命令。
/etc/init.d/tomcat6
cd
鉴于Java本身无法更改当前工作目录,那么/usr/share/tomcat6Tomcat的当前工作目录又如何呢?在启动过程中在哪里更改其cwd?
/usr/share/tomcat6
有问题的Linux是CentOS6。
在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。
/proc/<pid>/cwd