Weblogic启动提示stage目录下无.ear文件但文件实际存在如何解决
问题报错信息
Caused By: java.io.IOException: /home/weblogic/Oracle/Middleware/user_projects/domains/mydomain/servers/managed1/stage/myear/myear.ear (No such file or directory) with : /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/myear.ear
<Failed to create App/Comp MBeans for AppDeploymentMBean myear. Error - weblogic.management.DeploymentException: /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/myear/myear.ear
排查与解决步骤
1. 检查文件系统权限
WebLogic运行用户对EAR文件或上层目录缺少访问权限是这类问题的高发原因,SLES系统下权限管控严格,重启后可能出现权限重置的情况:
- 先确认WebLogic进程的运行属主:
ps -ef | grep weblogic - 递归检查全路径的权限配置:
namei -l /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/myear.ear,确保每一级目录对运行用户都有执行权限,EAR文件本身有读权限 - 如权限异常,执行以下命令修正(请替换为你实际的WebLogic运行用户和用户组):
chown -R weblogic:weblogic /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/ chmod -R 750 /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/
2. 清理损坏的部署缓存与元数据
报错中出现了重复层级的路径/myear/myear/myear.ear,说明部署元数据在异常重启后出现了错乱,需要彻底清理残留配置:
- 关停所有Managed Server和Admin Server
- 删除Managed Server对应应用的缓存目录:
rm -rf /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage/myear/ - 删除Admin Server的临时缓存:分别进入Admin Server目录下的
tmp、cache文件夹,删除所有和myear应用相关的文件 - 进入域的
config/deployments/目录,删除myear对应的配置文件夹和文件(操作前请提前备份config目录) - 启动Admin Server,登录控制台彻底删除myear的部署记录,确认控制台无该应用的残留条目后重新走部署流程,部署时选择stage模式,确保部署包同步到所有Managed Server节点
3. 验证部署模式配置
如果部署时错误选择了nostage模式,Admin Server和Managed Server的EAR路径不一致也会触发该错误:
- 控制台部署时,「部署阶段」选择「将应用程序分阶段部署到目标」,不要选择nostage或外部stage模式,除非你确认所有节点的EAR路径完全一致
- 如使用命令行部署,需要添加
-stage参数
4. 排查挂载/软链接异常
如果stage目录配置为软链接或共享存储挂载,服务器重启后可能出现挂载失效、软链接指向错误的问题:
- 执行
ls -ld /home/weblogic/Oracle/Middleware/user_projects/domains/epersonenstand/servers/managed1/stage确认目录属性,如为软链接需检查指向的目标路径是否存在、有权限 - 如为共享存储挂载,执行
df -h确认挂载点状态正常,无只读、未挂载的异常
5. 检查系统安全模块限制
SLES默认开启的AppArmor可能会限制WebLogic进程的文件访问权限:
- 执行
systemctl status apparmor检查服务状态,如为运行中可临时停止systemctl stop apparmor后重启WebLogic验证,如问题解决则将WebLogic的文件访问路径加入AppArmor白名单即可
内容的提问来源于stack exchange,提问作者user1919452

