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
ExecStart
和ExecStop
就是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
分别是哔哩哔哩序号35,小米运动序号2,米友社序号13,这个是同一个账号下运行的任务