CentOS7設(shè)置tomcat開機(jī)自啟動(dòng)

安裝jdk

參考《在CentOS7上安裝Hadoop和Hive》《Docker安裝tomcat服務(wù)》,安裝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、解壓到j(luò)vm目錄
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、測(cè)試jdk是否配置成功。
javajavac

安裝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、啟動(dòng)tomcat
cd /opt/apache-tomcat-8.0.50/bin/

./startup.sh

4、測(cè)試訪問(wèn)
curl localhost:8080
至此,遇到一個(gè)大坑。curl命令卡在那里不動(dòng)了,瀏覽器訪問(wèn)也是一直轉(zhuǎn)圈,轉(zhuǎn)啊轉(zhuǎn),十幾分鐘了還在轉(zhuǎn)。。。莫非,tomcat版本有問(wèn)題?換了8.5.29,不行;換了7.0.85,不行。莫非是jdk版本有問(wèn)題?畢竟第一次是使用yum命令安裝的。換了1.8.0_161,依然不行。

好在,最終找到了答案:Centos7+Tomcat8配置javaweb環(huán)境,tomcat啟動(dòng)巨慢的問(wèn)題,安裝rng服務(wù)。

(1)安裝熵服務(wù)
yum install rng-tools
(2)啟動(dòng)熵服務(wù)
systemctl start rngd
然后,tomcat就啟動(dòng)成功了。
(3)趕緊把rng服務(wù)放進(jìn)開機(jī)自啟動(dòng)
systemctl enable rngd

5、關(guān)閉tomcat。
./shutdown.sh

設(shè)置開機(jī)自啟動(dòng)

參考《在CentOS7中設(shè)置Tomcat開機(jī)自啟動(dòng)》,設(shè)置步驟如下:

假設(shè)tomcat目錄為/opt/apache-tomcat-8.0.50

1、為Tomcat添加啟動(dòng)參數(shù)

catalina.sh在執(zhí)行的時(shí)候會(huì)調(diào)用同級(jí)路徑下的setenv.sh來(lái)設(shè)置額外的環(huán)境變量,因此在/opt/tomcat/bin路徑下創(chuàng)建setenv.sh文件,內(nèi)容如下:

# 設(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
# 設(shè)置Tomcat的PID文件
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
# 添加JVM選項(xiàng)
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"

2、在/usr/lib/systemd/system路徑下添加tomcat.service文件,內(nèi)容如下:

[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加入開機(jī)自啟動(dòng)
systemctl enable tomcat.service

4、重啟服務(wù)器
reboot

5、再次連接后,查看服務(wù)狀態(tài)
systemctl status tomcat.service

看到tomcat已經(jīng)啟動(dòng),正想著大功告成,卻發(fā)現(xiàn)瀏覽器訪問(wèn)又開始轉(zhuǎn)圈了。檢查rng服務(wù),啟動(dòng)正常。
直接使用./startup.sh啟動(dòng)正常,而使用systemctl start tomcat就轉(zhuǎn)圈,還能是什么原因?
參照《CentOS7下Tomcat啟動(dòng)慢的原因及解決方案》一文,修改java.security,無(wú)效;修改catalina.sh,無(wú)效。
是不是tomcat.service寫的有問(wèn)題,參照其他配置方案修改,依然無(wú)效。
想到《Dockerfile使用Supervisor管理Tomcat》一文中,supervisor啟動(dòng)tomcat也會(huì)有些問(wèn)題。那么,修改startup.sh呢?依然無(wú)效。

萬(wàn)萬(wàn)沒(méi)想到,最后一步還有這么個(gè)深坑,沉思良久,莫非,要換init.d方法來(lái)設(shè)置啟動(dòng)?目前看來(lái),只能這樣了。

刪除開機(jī)自啟動(dòng)

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、測(cè)試啟動(dòng)
systemctl daemon-reload
systemctl start tomcat.service
出現(xiàn)提示Failed to start tomcat.service: Unit not found.說(shuō)明刪除成功。

設(shè)置開機(jī)自啟動(dòng)之init.d

1、在/etc/init.d下創(chuàng)建服務(wù)腳本
vim /etc/init.d/tomcat
寫入內(nèi)容如下:

#!/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
# 根據(jù)自己的路徑改寫JAVA_HOME
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161/  
export JAVA_HOME
# 根據(jù)自己的路徑改寫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、更改權(quán)限
chmod a+x /etc/init.d/tomcat

3、測(cè)試啟動(dòng)
service tomcat start
啟動(dòng)成功,然而,還是轉(zhuǎn)圈。。。

實(shí)際上,init.d方法添加的自啟動(dòng)服務(wù),也會(huì)加入到systemctl的管理。因?yàn)椋@時(shí)也可以用systemctl start tomcat來(lái)啟動(dòng)服務(wù)。

無(wú)奈,決定換成supervisor來(lái)設(shè)置自啟動(dòng)。

設(shè)置開機(jī)自啟動(dòng)之supervisor

開始設(shè)置前最好先刪除init.d方法設(shè)置的自啟動(dòng)文件,雖然不影響使用,但是看著鬧心。

1、安裝supervisor
yum install supervisor

2、創(chuàng)建sock
touch /tmp/supervisor.sock

chmod 777 /tmp/supervisor.sock

3、開機(jī)啟動(dòng)
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、運(yùn)行
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、測(cè)試訪問(wèn)
curl localhost:8080,成功。瀏覽器訪問(wèn),成功。
換了三種自啟動(dòng)方式,總算成功了,不容易。。。

10、重啟測(cè)試
reboot

11、二次測(cè)試
重啟后執(zhí)行supervisorctl status,tomcat正常運(yùn)行。
curl命令和瀏覽器測(cè)試,正常。至此,tomcat自啟動(dòng)配置成功。其實(shí),systemd和init.d兩種方法,理論上也是可以成功的,訪問(wèn)轉(zhuǎn)圈的鍋肯定是機(jī)器和系統(tǒng)的。嗯,就是這樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容