欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记Tomcat在Linux环境下开机启动无法监听8080端口

程序员文章站 2022-05-09 08:09:29
...

这个问题在百度搜了下无解,答案基本全篇一律,经过不停的实验,发现了原因。

首先,Linux在启动过程中是没有shell环境的,启动脚本需要加上PATH等基本的黄金变量。

需要的环境变量包括:JAVA_HOME,CLASSPATH,PATH,CATALINA_HOME,CATALINA_BASE
这几个环境变量加入了,基本就可以启动了。
如下,编辑/etc/rc.local:

export JAVA_HOME=/usr/local/java
export PATH=/usr/local/java/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
export CLASSPATH=/usr/local/java/jre/lib/ext:/usr/local/java/lib/tools.jar:.
export CATALINA_BASE=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
/usr/local/tomcat/bin/catalina.sh start

如果你的tomcat是NIO方式启动,是没有问题的,如果是用native+APR方式运行的,而且APR是手动编译安装的,那APR是不在上述PATH环境中的。
也就是说,tomcat启动找不到APR库会报错。

所以,要加上你手动编译的APR库路径:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

ok,这样就完美解决了。
有洁癖者,写个shell脚本,放到rc.local中。

再有洁癖者,加入/etc/init.d 也是可以的,现在都是CentOS7 启动方式都是systemd了,我也不知道那该死的***.service是怎么写的。如果你还能用/etc/init.d来启动程序,可以看看下面步骤:

1:cp  /tomcat_path/bin/catalina.sh  /etc/init.d/tomcat
2:vim /etc/init.d/tomcat
3:在#!/bin/bash下面加上
#chkconfig: 2345 10 90
#description: tomcat service

export JAVA_HOME=/usr/local/java(改成你的路径)
export CATALINA_HOME=/usr/local/tomcat(改成你的路径)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

4:chkconfig --add tomcat
5:service tomcat start

ok,是不是要结束了?

如果我不想用root用户启动怎么办?
用jsvc,在tomcat/bin目录下,有个commons-daemon-native.tar.gz

1:解压之
2:进入制定目录
3:./configure
4:make
5:cp jsvc ../..

编写启动脚本:

#!/bin/bash
CATALINA_HOME=***(自己写)
CATALINA_BASE=$CATALINA_HOME
export CATALINA_HOME CATALINA_BASE
cd $CATALINA_HOME
./bin/jsvc \
    -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
    -outfile $CATALINA_BASE/logs/catalina.out \
    -errfile $CATALINA_BASE/logs/catalina.err \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    org.apache.catalina.startup.Bootstrap
    -user tomcat

这回真的要结束了。
谢谢大家惠顾。
对了,最后一个脚本如果你是APR别忘了,加库的环境。

---------------还有一个情况---------------

TomCat在linux下只能监听IPV6的端口,但是无法监听Ipv4的端口,这个时候可以在Tomcat的bin中的catalina.sh中添加以下代码:

JAVA_OPTS=”$JAVA_OPTS -Djava.net.preferIPv4Stack=true”

—– Execute The Requested Command —————————————–

如果使用MyEclipse启动TomCat,可以在该TomCat的JDK的Optional Java VM arguments中添加如下参数

-Djava.net.preferIPv4Stack=true

也可以直接配置环境变量,添加JavaOPTS:

#vi ~/.profile
export JAVA_HOME=”/usr/java/jdk-7-sun”
export PATH=”$PATH:$JAVA_HOME/bin”
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_OPTS=”-Djava.net.preferIPv4Stack=true”

转载于:https://www.jianshu.com/p/25a5ab2a5543