tomcat的systemctl启动脚本
最近在做Tomcat的实验,顺便研究了一下tomcat的启动脚本发现一个问题,然后经过多方查阅其他大神的资料,终于解决,现在跟大家分享。
tomcat的启动脚本跟别的脚本有稍微区别的原因是他需要识别JAVA_HOME环境,你仅仅是写到/etc/profile文件中是不行的。
在启动的时候会报错,我们通过查询错误信息,显示如下信息内容
startup.sh[14716]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
明明定义了JAVA_HOME为什么显示没有JAVA_HOME呢?
因为tomcat自带的startup.sh脚本。调用的是catalina.sh脚本,然后catalina.sh脚本识别的是catalina.bat中的JAVA_HOME环境
所以我们可以直接在catalina.bat中添加JAVA_HOME,但是我觉得都已经写了启动脚本,还需要去别的地方改,这样的话,反而没有service的脚本方便,
然后查了资料发现。可以在systemctl脚奔模块中添加一个Environment来导入JAVA_HOME,下面将我写的tomcat的启动脚本分享给大家。
vim /usr/lib/systemd/system/tomcat.service
[Unit] Description=Tomcat After=network.target [Service] Type=forking Environment="JAVA_HOME=/usr/local/java" //tomcat启用时需要识别JAVA_HOME ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh [Install] WantedBy=multi-user.target
chmod 600 /usr/lib/systemd/system/tomcat.service
systemctl daemon-reload systemctl start tomcat
此时tomcat即可正常启动
附加说明一点
因为shutdown.sh脚本通过tomcat的8005号端口关闭tomcat,如果你的熵池比较小的话,那么你在启动tomcat的时候,可能需要一段时间才可以
完全启用到,可以通过查询端口,来查看tomcat有没有完全启动
ss -antp | grep java
增加熵池大小的话,可以参考我的另外一篇文章,tomcat启用是为什么8005端口没有被占用
最后,在赠送一个tomcat的service的启用脚本
vim /etc/init.d/tomcat #!/bin/bash #chkconfig: 2345 96 14 export JAVA_HOME=/usr/local/java export CATALINA_HOME=/usr/local/tomcat exec $CATALINA_HOME/bin/catalina.sh $*
[root@tomcat ~]# chmod +x /etc/init.d/tomcat [root@tomcat ~]# chkconfig --add tomcat [root@tomcat ~]# chkconfig tomcat on
如果有什么错误,或者问题,欢迎评论讨论