首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么决定了Tomcat Java进程的当前工作目录?

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

Stack Overflow用户
提问于 2013-09-12 08:53:49
回答 2查看 17.1K关注 0票数 9

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

Tomcat是通过以根用户身份运行service tomcat6 start (service在cwd /下运行初始化脚本)启动的。

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

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

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

我们讨论的Linux就是CentOS6。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 22:22:38

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

代码语言:javascript
复制
$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。

D脚本并不是tomcat的正式组成部分;它是由包维护者提供的,不同的系统可以不同。在我的Ubuntu13系统上,/etc/init.d/tomcat6包含一个cd到$CATALINA_BASE的命令。

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

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

票数 8
EN

Stack Overflow用户

发布于 2013-09-12 10:09:58

你看到变量了吗?

Tomcat这表示

  • CATALINA_HOME:安装的根目录。当我们说“此信息可以在您的Tomcat文件中找到”时,我们的意思是查看CATALINA_HOME/README.txt安装根目录下的README.txt文件。通过为每个实例定义$CATALINA_BASE,可以为多个实例配置
  • CATALINA_BASE。如果未配置多个实例,则CATALINA_BASE与CATALINA_HOME.

相同

在文件apache-tomcat-7.0.42/bin/catalina.sh中,您将看到:

代码语言:javascript
复制
# 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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18753663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档