使用脚本定时重启tomcat启动报错

问题:

由于生产需要定时启动tomcat保证业务运行,于是写了shell脚本来重启,并加入到crontab定时任务。测试都没问题,只有一个项目的tomcat总是启动失败。

分析:

用netstat -nptl查看端口,8080端口没有启动,8005和8009是起来的。

到/var/log/cron 里查看,定时任务有执行。

到tomcat/log/catalina2019-06-04.log(当天的日志)里看原因,发现有报错

04-Jun-2019 15:59:04.643 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
04-Jun-2019 15:59:04.769 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11AprProtocol-8080]]

 

04-Jun-2019 15:59:04.643 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
04-Jun-2019 15:59:04.769 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11AprProtocol-8080]]

原因:

要点:APR  not found on the java.library.path

定时任务里启动tomcat,需要先申明环境变量,这个都没问题,基本上就是三个:

JAVA_HOME , PATH ,CLASSPATH    。

然而,对于只使用apr模式的来说,还需要申明apr的路径,否则启动失败,这个是之前一直忽略的,简单的认为tomcat启动起来就行了。

解决:

找到apr的安装路径,在脚本里先做声明即可。

export LD_LIBRARY_PATH=/usr/local/apr/lib

总结:

手动执行脚本正常,定时任务不正常,基本就可以怀疑是环境变量的锅。

对比shell环境的时候,环境变量分散在~/.bash_profile 和 /etc/profile两个位置,导致没有第一时间准确的找到原因。

提升阅读日志的能力。

你可能感兴趣的:(tomcat,运维)