原文地址:https://www.jianshu.com/p/f0f8458e1631
安裝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兩種方法,理論上也是可以成功的,訪問轉圈的鍋肯定是機器和系統的。嗯,就是這樣。