Tomcat 7的setenv.sh文件未找到。

27
我下载并提取了apache-tomcat-7.0。根据RUNNING.txt (%CATALINA_BASE%/RUNNING.txt)中的说明,应在“setenv.sh”文件中设置JRE_HOME。
这个文件在哪里?文档说它应该在CATALINA_HOME/bin目录中。然而,该文件在那里不存在。
5个回答

31

文档实际上提到了默认情况下缺少setenv.(sh|bat)文件:

(3.4) Using the "setenv" script (optional, recommended)

Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can be specified in the "setenv" script. The script is placed either into CATALINA_BASE/bin or into CATALINA_HOME/bin directory and is named setenv.bat (on Windows) or setenv.sh (on *nix). The file has to be readable.

By default the setenv script file is absent. If the script file is present both in CATALINA_BASE and in CATALINA_HOME, the one in CATALINA_BASE is preferred.

For example, to configure the JRE_HOME and CATALINA_PID variables you can create the following script file:

On Windows, %CATALINA_BASE%\bin\setenv.bat:

  set "JRE_HOME=%ProgramFiles%\Java\jre@MIN_JAVA_VERSION@"
  exit /b 0

On *nix, $CATALINA_BASE/bin/setenv.sh:

  JRE_HOME=/usr/java/latest
  CATALINA_PID="/run/tomcat.pid"

https://github.com/apache/tomcat/blob/10.1.9/RUNNING.txt#L151


13

你只需自己创建一个;它不是发行版的一部分。这并不难。对于你的情况,只需添加:

JRE_HOME=/path/to/your/java/installation

将其写入文件并使其可执行 (chmod 755 setenv.sh)。

如果需要,还可以添加其他选项(例如 -Xmx )。


难道不应该是 export JRE_HOME=... 吗? - Oleg Mikheev
嗯,我使用类似的命令来设置 CATALINA_OPTS,而且不需要使用 export 命令。OP 可以验证一下。 - mindas

7
如果您在tomcat的bin文件夹中找不到“setenv.sh”或“setenv.bat”,请按照以下步骤进行操作:
  1. 在tomcat的bin文件夹中创建一个新文件。
  2. 将其重命名为setenv.sh(适用于Linux用户)或setenv.bat(适用于Windows用户)。
  3. 现在,您可以在此文件中设置多个项目:

设置JRE_HOME

对于Linux用户

JRE_HOME=/path/to/jre/jre6

对于Windows用户

set JAVA_HOME=C:\Path\to\jre\jdk6

设置JAVA_OPTS

对于Linux用户

JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m -DFOOBAR_CONFIGURATION_FILE=file:///C:/foobar.properties"

针对Windows用户

set "JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx512m -DFOOBAR_CONFIGURATION_FILE=file:///D:\foobar.properties"

设置变量后重启Tomcat。 就是这样。


2
太好了!对我有用。 - Kunal Gadhia
这些选项通常放在CATALINA_OPTS中,因为JAVA_OPTS也被内部Tomcat命令使用:停止进程、版本命令等。 - Marco Pelegrini

1
用户Mindas的回答完全正确:必须在CATALINA_HOME或者CATALINA_BASE目录下创建setenv.sh文件,正如catalina.sh文件中的注释所示。
然而,在CATALINA_HOME环境变量未设置的情况下,Tomcat必须猜测CATALINA_HOME/bin/目录的位置,这就产生了“先有鸡还是先有蛋”的问题。
我曾在一台Ubuntu服务器上遇到过这种情况,幸运的是Tomcat能够正确猜测CATALINA_HOME/bin/目录的位置。对于单用户环境来说,如果不需要为不同用户定制Tomcat,那么在catalina.sh脚本中设置JAVA_HOMEJRE_HOME环境变量可能是解决“先有鸡还是先有蛋”问题的方案。

0
在我的情况下,我下载了Windows版的Tomcat。它还带有Linux shell脚本,因此我创建了一个"setenv.sh"并尝试从Windows子系统中运行它,但是却遇到了上述错误。问题是非二进制shell脚本是针对Windows格式化的,而Linux不知道如何运行它们。将它们转换为Linux格式后,就能够识别和运行这些脚本了。尝试将Windows格式转换为Linux格式:
dos2unix $CATALINA_HOME/bin/*.sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接