Linux环境Tomcat9的setenv.sh未被加载生效问题排查求助
问题根因
该报错是Shell解析setenv.sh时的语法异常导致,核心触发原因按出现概率从高到低排序如下:
- 变量赋值未加引号包裹:你当前的
CATALINA_OPTS赋值语句包含空格,Shell会将空格后的-Djasypt.encryptor.password=123识别为独立的可执行命令,而非变量值的一部分,直接触发「not found」报错。这是最常见的失效原因,大概率是你上次编辑setenv.sh时意外删掉了引号。 - 文件换行符异常:如果是在Windows系统编辑
setenv.sh后上传到Linux,文件会自带Windows格式的CRLF换行符,Linux Shell无法识别异常换行符,会导致整行语句解析失败。 - 隐藏字符污染:赋值行前存在不可见的零宽空格、特殊控制字符,也会导致Shell解析语句失败。
修复操作步骤
- 修正变量赋值语法,将
setenv.sh的内容修改为如下格式,用双引号包裹整段参数值:
CATALINA_OPTS="-Xmx512m -Djasypt.encryptor.password=123"
- 转换文件换行符为Linux标准的LF格式,执行以下命令即可:
# 已安装dos2unix的场景 dos2unix /usr/tomcat/tc9/bin/setenv.sh # 未安装dos2unix的场景,直接用sed替换回车符 sed -i 's/\r$//' /usr/tomcat/tc9/bin/setenv.sh
- 统一文件权限和目录下其他Shell脚本保持一致:
chmod 755 /usr/tomcat/tc9/bin/setenv.sh
- 验证修复效果:执行
./catalina.sh version确认无报错后,正常启动Tomcat,执行ps -ef | grep tomcat查看进程参数,确认配置的-Xmx512m和jasypt加密参数已加载到进程启动参数中即可。
内容的提问来源于stack exchange,提问作者cp.
相关产品推荐
相关产品推荐

