在 Linux 下面,可以使用 bin/catalina.sh stop 来执行 graceful stop
你会在日志里看到类似下面的输出,这表明 Tomcat 将在处理完当前的HTTP后退出
Jan 12, 2018 6:11:55 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated for Servlet [jsp]
Jan 12, 2018 6:11:56 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated for Servlet [jsp]
Jan 12, 2018 6:11:57 PM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
com.baidu.openrasp.exception.ConfigLoadException: Fail to extract rasp-log4j.xml, because of: /usr/share/tomcat8/rasp/conf/rasp-log4j.xml (Permission denied)
at com.baidu.openrasp.messaging.LogConfig.extractLogConfigFile(LogConfig.java:153)
at com.baidu.openrasp.messaging.LogConfig.completeLogConfig(LogConfig.java:72)
at com.baidu.openrasp.Agent.loadConfig(Agent.java:91)
at com.baidu.openrasp.Agent.premain(Agent.java:66)
2. 修改 Tomcat 启动脚本
打开 bin/catalina.sh, 找到如下内容:
elif [ "$1" = "start" ] ; then
if [ ! -z "$CATALINA_PID" ]; then
修改为如下(增加 -javaagent 项)
elif [ "$1" = "start" ]; then
JAVA_OPTS="-javaagent:${CATALINA_HOME}/rasp/rasp.jar ${JAVA_OPTS}"
if [ ! -z "$CATALINA_PID" ]; then
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
在 :setArgs 下增加新的 JAVA_OPTS,e.g
:setArgs
if "%ACTION%" == "start" set JAVA_OPTS=-javaagent:%CATALINA_HOME%\rasp\rasp.jar %JAVA_OPTS%
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
对于JDK9以上版本,还需要额外增加两个JDK启动参数,e.g
:setArgs
if "%ACTION%" == "start" set JAVA_OPTS=-javaagent:%CATALINA_HOME%\rasp\rasp.jar --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED %JAVA_OPTS%
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1