记Tomcat在Linux环境下开机启动无法监听8080端口
这个问题在百度搜了下无解,答案基本全篇一律,经过不停的实验,发现了原因。
首先,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
上一篇: 荣耀手环4无法推送消息该怎么解决?
下一篇: node模拟一个简单的服务器