CentOS7设置tomcat开机自启动
安装jdk
参考《在CentOS7上安装Hadoop和Hive》和《Docker安装tomcat服务》,安装jdk和tomcat。
1、下载jdk8u161
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
2、解压到jvm目录
mkdir -p /usr/lib/jvm
tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/lib/jvm/
3、配置JAVA_HOME和JRE_HOME,vi /etc/profile
,在最后添加:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
然后使配置文件生效,source /etc/profile。
4、测试jdk是否配置成功。
java
,javac
安装tomcat
1、下载tomcat8.0.50
wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.0.50/bin/apache-tomcat-8.0.50.tar.gz
2、解压tomcat到/opt目录
tar -xzvf apache-tomcat-8.0.50.tar.gz -C /opt
3、启动tomcat
cd /opt/apache-tomcat-8.0.50/bin/
./startup.sh
4、测试访问
curl localhost:8080
至此,遇到一个大坑。curl命令卡在那里不动了,浏览器访问也是一直转圈,转啊转,十几分钟了还在转。。。莫非,tomcat版本有问题?换了8.5.29,不行;换了7.0.85,不行。莫非是jdk版本有问题?毕竟第一次是使用yum命令安装的。换了1.8.0_161,依然不行。
好在,最终找到了答案:Centos7+Tomcat8配置javaweb环境,tomcat启动巨慢的问题,安装rng服务。
(1)安装熵服务
yum install rng-tools
(2)启动熵服务
systemctl start rngd
然后,tomcat就启动成功了。
(3)赶紧把rng服务放进开机自启动
systemctl enable rngd
5、关闭tomcat。
./shutdown.sh
设置开机自启动
参考《在CentOS7中设置Tomcat开机自启动》,设置步骤如下:
假设tomcat目录为/opt/apache-tomcat-8.0.50
1、为Tomcat添加启动参数
catalina.sh在执行的时候会调用同级路径下的setenv.sh来设置额外的环境变量,因此在/opt/tomcat/bin路径下创建setenv.sh文件,内容如下:
# 设置JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CATALINA_HOME=/opt/apache-tomcat-8.0.50
export CATALINA_BASE=/opt/apache-tomcat-8.0.50
# 设置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
# 添加JVM选项
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
2、在/usr/lib/systemd/system路径下添加tomcat.service文件,内容如下:
[Unit]
Description=tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/apache-tomcat-8.0.50/tomcat.pid
ExecStart=/opt/apache-tomcat-8.0.50/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3、把tomcat加入开机自启动
systemctl enable tomcat.service
4、重启服务器
reboot
5、再次连接后,查看服务状态
systemctl status tomcat.service
看到tomcat已经启动,正想着大功告成,却发现浏览器访问又开始转圈了。检查rng服务,启动正常。
直接使用./startup.sh
启动正常,而使用systemctl start tomcat
就转圈,还能是什么原因?
参照《CentOS7下Tomcat启动慢的原因及解决方案》一文,修改java.security,无效;修改catalina.sh,无效。
是不是tomcat.service写的有问题,参照其他配置方案修改,依然无效。
想到《Dockerfile使用Supervisor管理Tomcat》一文中,supervisor启动tomcat也会有些问题。那么,修改startup.sh呢?依然无效。
万万没想到,最后一步还有这么个深坑,沉思良久,莫非,要换init.d方法来设置启动?目前看来,只能这样了。
删除开机自启动
1、删除tomcat.service
find / -name "tomcat*"
rm /usr/lib/systemd/system/tomcat.service
rm /etc/systemd/system/multi-user.target.wants/tomcat.service
rm /etc/selinux/targeted/active/modules/100/tomcat
2、测试启动
systemctl daemon-reload
systemctl start tomcat.service
出现提示Failed to start tomcat.service: Unit not found.说明删除成功。
设置开机自启动之init.d
1、在/etc/init.d下创建服务脚本
vim /etc/init.d/tomcat
写入内容如下:
#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
#
# chkconfig: 345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions
prog=tomcat
# 根据自己的路径改写JAVA_HOME
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161/
export JAVA_HOME
# 根据自己的路径改写CATALANA_HOME
CATALANA_HOME=/opt/apache-tomcat-8.0.50/
export CATALINA_HOME
case "$1" in
start)
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
stop)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
;;
restart)
echo "Stopping Tomcat..."
$CATALANA_HOME/bin/shutdown.sh
sleep 2
echo
echo "Starting Tomcat..."
$CATALANA_HOME/bin/startup.sh
;;
*)
echo "Usage: $prog {start|stop|restart}"
;;
esac
exit 0
2、更改权限
chmod a+x /etc/init.d/tomcat
3、测试启动
service tomcat start
启动成功,然而,还是转圈。。。
实际上,init.d方法添加的自启动服务,也会加入到systemctl的管理。因为,这时也可以用systemctl start tomcat
来启动服务。
无奈,决定换成supervisor来设置自启动。
设置开机自启动之supervisor
开始设置前最好先删除init.d方法设置的自启动文件,虽然不影响使用,但是看着闹心。
1、安装supervisor
yum install supervisor
2、创建sock
touch /tmp/supervisor.sock
chmod 777 /tmp/supervisor.sock
3、开机启动
systemctl enable supervisord
4、生成配置文件
mkdir -p /etc/supervisor/
echo_supervisord_conf > /etc/supervisord.conf
5、修改配置文件,vim /etc/supervisord.conf
,添加:
[include]
files = /etc/supervisor/*.conf
6、运行
systemctl start supervisord
7、在/etc/supervisor中新建tomcat.conf文件
[program:tomcat]
directory=/opt/apache-tomcat-8.0.50
command=/opt/apache-tomcat-8.0.50/bin/catalina.sh run
environment=JAVA_HOME="/usr/lib/jvm/jdk1.8.0_161",JAVA_BIN="/usr/lib/jvm/jdk1.8.0_161/bin"
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
8、重启supervisor
systemctl retart supervisord
PS:重启tomcat命令
supervisorctl -c /etc/supervisord.conf restart tomcat
9、测试访问
curl localhost:8080
,成功。浏览器访问,成功。
换了三种自启动方式,总算成功了,不容易。。。
10、重启测试
reboot
11、二次测试
重启后执行supervisorctl status
,tomcat正常运行。
curl命令和浏览器测试,正常。至此,tomcat自启动配置成功。其实,systemd和init.d两种方法,理论上也是可以成功的,访问转圈的锅肯定是机器和系统的。嗯,就是这样。