Linux下Tomcat守护进程的创建并配置开机自启

Tomcat守护进程的创建

为了防止Tomcat崩掉,设置守护进程以实现自启动的效果

核心:使用jsvc来守护Tomcat,jsvc是一个属于Apache的Commons项目的Java库。

编译jsvc

tomcat的二进制安装包中的bin目录下就有jsvc的安装包,我们需要使用GCC编译器对其进行编译安装。同时在编译的时候我们需要指定jdk的路径,由于我们前面已经手动指定了,这里不需要再指定。如果没有,可以使用./configure --with-java=$JAVA_HOME来进行操作。

 # 首先我们进入tomcat的bin目录进行编译
 cd $CATALINA_HOME/bin
 tar xvfz commons-daemon-native.tar.gz
 cd commons-daemon-1.2.2-native-src/unix
 ./configure
 make
 # 编译完成后,会在当前文件夹生成一个jsvc的文件,将它拷贝到tomcat的/bin/目录下
 cp jsvc ../..
 cd ../..
 # 接着我们可以这样查看jsvc的帮助文档
 ./jsvc -help

如果出现error,可能为gcc版本问题导致,尝试安装或更新gcc:

yum -y install gcc gcc-c++ kernel-devel

运行Tomcat

使用以下命令运行Tomcat:

./jsvc \
    -user root \
    -server -XX:PermSize=256M -XX:MaxPermSize=512m -Xms16384M -Xmx16384M -Xmn8192m -XX:MaxNewSize=256m \
    -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

注意:根据服务器内存来调节内存大小,否则可能会内存溢出!!如果使用默认内存设置,请去掉第二行-server...

关闭Tomcat

./jsvc -stop org.apache.catalina.startup.Bootstrap stop

请不要使用kill -9来强行结束进程,可能会导致进程残留

添加快捷指令alias

每次都得运行这一大坨指令显得很烦,直接添加快捷指令方便调用

打开配置文件:vi ~/.bashrc

增加启动指令:

alias startformal='这里写入指令'
# 请自行修改指令和安装路径,startformal也可以换成其他的指令
/usr/local/tomcat8/bin/./jsvc     -user root     -server -XX:PermSize=256M -XX:MaxPermSize=512m -Xms16384M -Xmx16384M -Xmn8192m -XX:MaxNewSize=256m     -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 && logformal

增加关闭指令

alias stopformal='/usr/local/tomcat8/bin/./jsvc -stop org.apache.catalina.startup.Bootstrap stop'
# 自行修改tomcat目录

增加打印日志指令

alias logformal='tail -f /usr/local/tomcat8/logs/catalina.out'
# 自行修改日志保存的路径

最后使更改的配置立即生效:source ~/.bashrc

使用Systemctl 来创建tomcat开机自启服务

正常安装的tomcat都已经会有系统服务,位置在 /usr/lib/systemd/system/tomcat.service

当然也有可能是tomcat x.service ,视情况而定,而jsvc守护进程的服务配置文件,与正常的配置文件有所不同

这个是正常的tomcat.service文件

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=simple
EnvironmentFile=/etc/tomcat/tomcat.conf
Environment="NAME="
EnvironmentFile=-/etc/sysconfig/tomcat
ExecStart=/usr/libexec/tomcat/server start
SuccessExitStatus=143
User=tomcat

[Install]
WantedBy=multi-user.target

现在我们需要修改:

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/java/jdk1.8.0_231
Environment=CATALINA_HOME=/usr/local/tomcat8
Environment=CATALINA_BASE=/usr/local/tomcat8

ExecStart=/usr/local/tomcat8/bin/./jsvc     -user root     -server -XX:PermSize=256M -XX:MaxPermSize=512m -Xms16384M -Xmx16384M -Xmn8192m -XX:MaxNewSize=256m     -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     -Dspring.profiles.active=prod     org.apache.catalina.startup.Bootstrap 

ExecStop=/usr/local/tomcat8/bin/./jsvc -stop org.apache.catalina.startup.Bootstrap stop

[Install]
WantedBy=multi-user.target

ExecStartExecStop就是jsvc的启动和停止指令,根据自己情况修改,切勿直接复制上面的

修改完成之后,调用systemctl daemon-reload'刷新规则

然后调用启动指令来验证配置文件是否正确:systemctl start tomcat8.service

查看systemctl启动日志:systemctl status tomcat8.service

完事之后,开启开机自启:systemctl enable tomcat8.service

systectl的部分指令

这里以nginx为例

#启动nginx
systemctl start nginx.service
#重载nginx
systemctl reload nginx.service
#停止nginx
systemctl stop nginx.service
#重启nginx
systemctl restart nginx.service
#如果需要开机启动
systemctl enable nginx.service
#如果需要取消开机启动
systemctl disable nginx.service

上述指令,和你自己在service配置文件写的有关系,你没写就没有

关于systemctl配置文件更详细的解释,请查看Linux使用systemd后台运行服务并自启 - oldwu's Blog

评论区
头像
文章目录