建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块

Guest24756...

发帖: 2粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-8-2 15:14:19 1574 3 楼主 显示全部楼层
[求助] 【问题】环境变量中有函数时, 可能导致servicecomb启动失败

linux有函数型环境变量时, 里面的变量会导致servicecomb启动扫描处理出错而无法启动。 

CSE版本:<java-chassis.version>1.2.0</java-chassis.version>


cse-failed-init-bean-because-of-func-env-var.png



2019-08-02 06:58:34.543 ERROR 15302 --- [           main] o.s.boot.SpringApplication               : Applicat

ion startup failed


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.servicecomb.config.Co

nfigurationSpringInitializer#0' defined in URL [jar:file:/home/***/chkcse/test-server-dependency/foundation-config-1

.1.0.jar!/META-INF/spring/cse.bean.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentExc

eption: Could not resolve placeholder 'FUNCNAME[0]' in value "() {  local tmpUrl;

 [ $1 ] || {

 echo "unable to ${FUNCNAME[0]} without input argument";

 exit -1

 };

 tmpUrl=$(echo $1|sed -r "s/^.*:\/\//\L&/");

 [[ "${tmpUrl}" =~ ^https?: ]] || {

 tmpUrl="http://${tmpUrl}"

 };

 echo ${tmpUrl}

}"


举报
分享

分享文章到朋友圈

分享文章到微博

liubao68

发帖: 106粉丝: 17

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2019-8-5 18:59:40 沙发 显示全部楼层

问题是不是可以简化为“环境变量值里面引用了其他变量的场景”?


比如:

 MY_ENV = XXXDFDD${MISSED_ENV}


MISSED_ENV 没配置,导致启动失败?

点赞 引用 举报

Guest24756...

发帖: 2粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-8-12 10:39:18 板凳 显示全部楼层
liubao68 发表于 2019-8-5 18:59 问题是不是可以简化为“环境变量值里面引用了其他变量的场景”?比如: MY_ENV = XXXDFDD${MISSED_ENV}MISSED_ENV 没配置,导致

多谢回复,

问题可以简化成这样, 执行内确实是对其他变量的引用;


但后一点推论有一点疑问, 因为从执行的bash脚本角度看, 所引用的并不是一个missed_env, 比如截屏中的第一个变量$FUNCNAME会引起错误, 但它实际就是正在执行的脚本中定义的函数名.


报错时尝试过如下两种规避方案, 都能够顺利执行下去:

  1. 将所有变量占位符改成硬编码的非变量方式

  2. 启动cse客户端前, 主动unset清除掉这个function


点赞 引用 举报

Guest24756...

发帖: 2粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2019-8-12 11:13:05 地板 显示全部楼层
Guest247561 发表于 2019-8-12 10:39 多谢回复, 问题可以简化成这样, 执行内确实是对其他变量的引用;但后一点推论有一点疑问, 因为从执行的bash脚本角度看, 所引用的并不是一个missed_en

补充,

针对上一回复中提到的missed_env讨论, 截屏中下一个环境变量占位也许更能解释:

tmpUrl=$(echo $1|sed -r "s/^.*:\/\//\L&/")
[[ "${tmpUrl}" =~ ^https?: ]] || {
tmpUrl="http://${tmpUrl}";
}

第二句中的${tmpUrl}也会出错, 但无论$1是否存在, 这一段都不应该有问题的.

点赞 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册