Java Ubuntu 16.04:Tomcat 8赢得';t从setenv.sh开始

Java Ubuntu 16.04:Tomcat 8赢得';t从setenv.sh开始,java,ubuntu,tomcat,Java,Ubuntu,Tomcat,我在我的tomcat8/bin目录中创建了一个setenv.sh文件,内容如下: #!/bin/sh # # ENVARS for Tomcat # export CATALINA_HOME="/usr/share/tomcat8" export CATALINA_BASE="/usr/share/tomcat8" export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java" # TDS specific ENVARS

我在我的
tomcat8/bin
目录中创建了一个
setenv.sh
文件,内容如下:

#!/bin/sh
#
# ENVARS for Tomcat
#
export CATALINA_HOME="/usr/share/tomcat8"

export CATALINA_BASE="/usr/share/tomcat8"

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java"

# TDS specific ENVARS
#
# Define where the TDS content directory will live
#   THIS IS CRITICAL and there is NO DEFAULT - the
#   TDS will not start without this.
#
CONTENT_ROOT=-Dtds.content.root.path=/var/lib/tomcat8/content

# set java prefs related variables (used by the wms service, for example)
JAVA_PREFS_ROOTS="-Djava.util.prefs.systemRoot=$CATALINA_HOME/content/thredds/javaUtilPrefs \
                  -Djava.util.prefs.userRoot=$CATALINA_HOME/content/thredds/javaUtilPrefs"

#
# Some commonly used JAVA_OPTS settings:
#
NORMAL="-d64 -Xmx4096m -Xms512m -server -ea"
HEAP_DUMP="-XX:+HeapDumpOnOutOfMemoryError"
HEADLESS="-Djava.awt.headless=true"

#
# Standard setup.
#
JAVA_OPTS="$CONTENT_ROOT $NORMAL $MAX_PERM_GEN $HEAP_DUMP $HEADLESS $JAVA_PREFS_ROOTS"

export JAVA_OPTS
很遗憾,保存此文件后tomcat将无法启动:

tomcat8.service - LSB: Start Tomcat.
   Loaded: loaded (/etc/init.d/tomcat8; bad; vendor preset: enabled)
   Active: failed (Result: exit-code) since Do 2016-05-26 16:45:51 CEST; 6min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 5903 ExecStart=/etc/init.d/tomcat8 start (code=exited, status=1/FAILURE)

Mai 26 16:45:46 student systemd[1]: Starting LSB: Start Tomcat....
Mai 26 16:45:46 student tomcat8[5903]:  * Starting Tomcat servlet engine tomcat8
Mai 26 16:45:51 student tomcat8[5903]:    ...fail!
Mai 26 16:45:51 student systemd[1]: tomcat8.service: Control process exited, code=exited status=1
Mai 26 16:45:51 student systemd[1]: Failed to start LSB: Start Tomcat..
Mai 26 16:45:51 student systemd[1]: tomcat8.service: Unit entered failed state.
Mai 26 16:45:51 student systemd[1]: tomcat8.service: Failed with result 'exit-code'.
我需要外部服务器应用程序(THREDD数据服务器)的此配置。我想可能是JAVA_HOME变量有问题。我复制了我用
sudo update alternations--config java
找到的路径(请参阅)


有人能告诉我出了什么问题吗?

有两点可以解决我的问题:

  • setenv.sh
    文件中,我忘记将
    content\u root
    的值放在引号之间:
  • CONTENT\u ROOT=“-Dtds.CONTENT.ROOT.path=/var/lib/tomcat8/CONTENT”

  • 我必须更改此文件夹的写入权限:

  • sudo chmod a+rwx/var/lib/tomcat8/content/
    我发现了这个问题,因为我收到了类似的错误消息。在做了一些挖掘之后,我发现启动tomcat的服务脚本完全忽略了
    /usr/share/tomcat8/bin/setenv.sh
    :etc/init.d/tomcat8。相反,它在
    /etc/default/tomcat8
    中查看环境设置

    这意味着,即使tomcat使用setenv.sh中指定的JVM启动,init脚本也无法看到它正在运行,因为它希望使用不同的JVM

    不要在setenv.sh中设置
    JAVA\u HOME
    ,而是在
    /etc/default/tomcat8
    中设置它。此时,我已经完全删除了setenv.sh,并将所有tomcat设置放在/etc/中

    编辑:自从我写了这个答案,我已经迁移到Tomcat9。同样的事情也适用于Ubuntu下的最新版本。以下是my
    /etc/default/tomcat9的当前内容:

    # The home directory of the Java development kit (JDK). You need at least
    # JDK version 8. If JAVA_HOME is not set, some common directories for
    # OpenJDK and the Oracle JDK are tried.
    JAVA_HOME=`readlink -f  /usr/bin/javac | sed 's|/bin/javac||g'`
    
    # You may pass JVM startup parameters to Java here. If unset, the default
    # options will be: -Djava.awt.headless=true -XX:+UseG1GC
    JAVA_OPTS="-Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -Xms256m -Xmx2048m -XX:MaxPermSize=512M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
    

    您是否尝试过
    /usr/lib/jvm/java-8-openjdk-amd64/jre
    作为java_HOME?1。您的
    setenv.sh
    是否可执行?2.您应该设置
    CATALINA\u选项
    ,而不是
    JAVA\u选项