參考博文:Linux下daemon部署Tomcat

通常我們在開發環境使用tomcat時直接使用$CATALINA_HOME/bin/startup.bat和shutdown.bat來啟動和關閉tomcat。然而在生產環境中我們需要將tomcat配置成以daemon守護程序來執行,主要有以下幾個原因:

  • 以daemon方式執行tomcat可使tomcat不受終端影響,不會因為退出終端而停止執行。
  • 可以讓tomcat以普通使用者身份執行
  • 可以讓tomcat在系統啟動時自動執行

下面開始配置:
1.配置環境變數
配置JAVA_HOME,CATALINA_HOME兩個環境變數

export JAVA_HOME=/usr/local/jdk
export CATALINA_HOME=/usr/local/tomcat

2.編譯安裝jsvc
jsvc 是 daemon 模式用來啟動 Tomcat 8 的程式

#解壓
cd $CATALINA_HOME/bin
tar -zxvf commons-daemon-native.tar.gz
#配置
cd commons-daemon-1.1.0-native-src/unix
./configure --with-java=/usr/local/jdk
#編譯
make

#編譯後,會產生一個jsvc的二進位制可執行檔案。將其複製到$CATALINA_HOME/bin下
cp jsvc ../..

3.建立使用者和組
建立tomcat使用者,僅用來執行tomcat

#建立tomcat組
groupadd tomcat
#建立tomcat使用者(該使用者沒有登入許可權)
useradd tomcat -s /sbin/nologin -M 

#設定目錄所屬使用者和組
chown -R tomcat:tomcat /usr/local/tomcat 

4.建立setenv.sh檔案
在tomcat/bin目錄下建立setenv.sh檔案

vim setenv.sh

新增內容

# add tomcat pid
CATALINA_PID="/usr/local/tomcat/tomcat.pid"
# add JAVA_HOME
JAVA_HOME=/usr/local/jdk
# add JAVA_OPTS
JAVA_OPTS="-server -Xms256M -Xmx512M -XX:MaxNewSize=256m"

5.設定後臺啟動指令碼(如果上面設定了setenv.sh這裡這裡可跳過)
開啟daemon.sh檔案

vim /usr/local/tomcat/bin/daemon.sh

搜尋

找到&& TOMCAT_USER=tomcat,將這裡的TOMCAT_USER設定為建立的使用者。
若本來就使用的tomcat使用者,所以這裡不用改

取消JAVA_HOME的註釋,並改為自己的jdk配置路徑
JAVA_HOME=/usr/local/jdk

6.配置開機啟動
有傳統的service服務方式和centos7中新的systemctl方式

方式一:service服務方式(傳統方式)

7.在/etc/init.d/目錄下編寫啟動tomcat服務的指令碼

#建立tomcat
vim /etc/init.d/tomcat

寫入如下內容

#!/bin/bash
#startup script for tomcat on linux

# chkconfig: 2345 10 90 
# description: tomcat sever ....

#filename tomcat.sh

#JAVA_HOME=/usr/local/jdk
TOMCAT_HOME=/usr/local/tomcat
################################################
start_tomcat=$TOMCAT_HOME/bin/daemon.sh
stop_tomcat=$TOMCAT_HOME/bin/daemon.sh

start() {
    echo -n "Starting tomcat: "
    ${start_tomcat} start
    echo "tomcat start ok"
}

stop() {
    echo -n "Shutdown tomcat"
    ${stop_tomcat} stop
    echo "tomcat stop ok"
}

#how we were called

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 10
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
esac

exit 0

8.授權

chmod 777 /etc/init.d/tomcat

9.service方式啟動

#新增tomcat服務
chkconfig --add tomcat
#檢視tomcat服務是否被新增
chkconfig –list | grep tomcat

#啟動/停止/重啟tomcat服務
service tomcat start/stop/restart        
#檢視tomcat服務狀態    
service tomcat status                           

方式二:systemctl服務方式(新方式)

以前都用service命令管理軟體,而centos7.x引入新的方式來管理系統程序,使用systemctl替換了service命令,當然service方式依舊可以繼續使用。systemctl是一個systemd工具,主要負責控制systemd系統和服務管理器。systemctl的使用可參考CentOS7中systemctl的使用

7.建立開機啟動服務檔案
建立一個名為tomcat.service的系統服務指令碼

#建立一個名為tomcat.service的系統服務指令碼
vim /usr/lib/systemd/system/tomcat.service

寫入以下內容

[Unit]
Description=Apache Tomcat
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/tomcat/tomcat.pid
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat

ExecStart=/usr/local/tomcat/bin/daemon.sh start
ExecStop=/usr/local/tomcat/bin/daemon.sh stop
User=tomcat
Group=tomcat
PrivateTmp=true
[Install]
WantedBy=multi-user.target

配置好後,要重新整理一下

#重新載入一下配置。每次改動後也要重新載入
systemctl daemon-reload

8.設定開機啟動,並啟動服務

#設定允許開機自啟動
systemctl enable tomcat 

#啟動服務
systemctl start tomcat
#檢視狀態
systemctl status tomcat
#檢視服務是否啟用
systemctl is-active tomcat

##其它命令
# 禁止開機啟動
systemctl disable tomcat
# 停止服務
systemctl stop tomcat
# 重啟服務
systemctl restart tomcat
# 檢視所有已啟動的服務
systemctl list -units --type=service