You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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解析语句失败。
修复操作步骤
  1. 修正变量赋值语法,将setenv.sh的内容修改为如下格式,用双引号包裹整段参数值:
CATALINA_OPTS="-Xmx512m -Djasypt.encryptor.password=123"
  1. 转换文件换行符为Linux标准的LF格式,执行以下命令即可:
# 已安装dos2unix的场景
dos2unix /usr/tomcat/tc9/bin/setenv.sh
# 未安装dos2unix的场景,直接用sed替换回车符
sed -i 's/\r$//' /usr/tomcat/tc9/bin/setenv.sh
  1. 统一文件权限和目录下其他Shell脚本保持一致:
chmod 755 /usr/tomcat/tc9/bin/setenv.sh
  1. 验证修复效果:执行./catalina.sh version确认无报错后,正常启动Tomcat,执行ps -ef | grep tomcat查看进程参数,确认配置的-Xmx512m和jasypt加密参数已加载到进程启动参数中即可。

内容的提问来源于stack exchange,提问作者cp.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:06:05