bash - tomcat jvm参数丢失
问题描述
我想用 javaagent 运行 tomcat。
setenv.sh:
export JAVA_HOME=/home/ggfan/1-install/java/jdk1.8.0_271
export CATALINA_OPTS="${CATALINA_OPTS} -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource\$PoolGuardConnectionWrapper"
调用startup.sh,似乎tomcat正确选择了它:
[ggfan@localhost bin]$ ./startup.sh
Using CATALINA_BASE: /home/ggfan/1-install/apache-tomcat-8.5.64
Using CATALINA_HOME: /home/ggfan/1-install/apache-tomcat-8.5.64
Using CATALINA_TMPDIR: /home/ggfan/1-install/apache-tomcat-8.5.64/temp
Using JRE_HOME: /home/ggfan/1-install/java/jdk1.8.0_271
Using CLASSPATH: /home/ggfan/1-install/apache-tomcat-8.5.64/bin/bootstrap.jar:/home/ggfan/1-install/apache-tomcat-8.5.64/bin/tomcat-juli.jar
Using CATALINA_OPTS: -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
Tomcat started.
但是,从tomcat日志:
24-Sep-2021 15:45:04.437 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -javaagent:/home/ggfan/2-work/centuari-space/jdbc-leak-detector/target/jdbcld.jar=/home/ggfan/3-tmp/logs/jdbcld,INFO,org.apache.commons.dbcp.PoolingDataSource
'$' 符号后的内部类名丢失,我的 javaagent 收到的真正参数是不完整的。
怎么了?
我在 Fedora 31 上使用 tomcat Apache Tomcat/8.5.64 运行
解决方案
为了拆分CATALINA_OPTS
成单词并将它们作为参数传递给java
,catalina.sh
脚本使用eval
:
eval exec "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
...
这显然在 上执行变量扩展$PoolGuardConnectionWrapper
。为了防止这种情况两次转义美元符号:
export CATALINA_OPTS="${CATALINA_OPTS} ...PoolingDataSource\\\$PoolGuardConnectionWrapper"
推荐阅读
- cesium - 铯中的这种暗图像是否正常?
- tableau-api - 我可以在一个计算字段中进行多项计算吗?
- r - How to use Rvest to scrape data
- java - Java tomcat线程内存使用限制
- android - React Native 不使用 Android Studio 链接模块
- swift - 将模型保存到 Userdefaults 会使应用程序迅速崩溃
- android - 如何调查为什么 gradle build 使用缓存的资源 ID
- java - Spring preAuthorize SpEL查询的日志结果?
- java - 压缩机是抽象的;无法实例化
- ios - Xcode 找不到任何与“应用程序名称”匹配的 iOS 应用程序开发配置文件