首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只启动jboss-cli一次

只启动jboss-cli一次
EN

Stack Overflow用户
提问于 2020-06-18 20:21:58
回答 1查看 328关注 0票数 0

我想创建一个bash/shell脚本,通过使用jboss-cli来监视Wildfly的JVM内存使用情况。因此,我需要获取主机,并在for循环中获取每个主机的Wildfly服务器。但是,启动/连接jboss-cli需要几秒钟的时间,并且会给CPU带来压力。这会使脚本变得非常慢。在交互式jboss-cli会话中发送命令非常快。

有没有办法只连接到jboss-cli一次,并将输入命令发送到该活动会话?我需要命令的输出才能继续执行脚本。

当前脚本:

代码语言:javascript
运行
复制
# List all hosts:
hosts="$(jboss-cli.sh -c --controller=servername:9990 --command=":read-children-names(child-type=host)" | grep "        " | awk '{print $1}' | sed 's/,//g' | sed 's/"//g')"
# Loop through hosts results:
for host in $hosts
{       
        #List all servers:
        servers="$(jboss-cli.sh -c --controller=servername:9990 --command="/host=$host:read-children-names(child-type=server)" | grep "        " | awk '{print $1}' | sed 's/,//g' | sed 's/"//g')"
        # Loop through server results:
        for server in $servers
        {
            # check if server is running:
            serverstate=$(jboss-cli.sh -c --controller=servername:9990 --command="/host=$host/server=$server:read-attribute(name=server-state)" | grep "result" | awk '{print $3}' | sed 's/"//g')

            if [ $serverstate = "running" ]
            then
                #Do a check etc. etc.
            fi
        }       
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-19 00:00:48

也有类似的问题。我的解决方案是在ksh中使用coroutine,我不知道在bash中是否可以像您的标志那样使用(但如果安装了ksh,您仍然可以使用它)。至少它可以给你一些指点。

代码语言:javascript
运行
复制
#!/bin/ksh

#connecting using coroutine -- Note the |& at the end
{JBOSS_HOME}/bin/jboss-cli.sh --connect --controller={Master_IP}:{Master_Port} --user={UID} --password={Password} |&
#sending request to coroutine
print -p "ls -l /host\n"
#Reading from corouting
while read -p answer; do
##Need to verify when stop reading -- after the prompt is back
    if [[ $answer != *domain*:* ]]; then
    ## If it's not an error, concatenate, space delimited, the response
        if [[ $answer == *WFLYCTL* ]]; then
            print "$(date +"%Y%m%d%H%M") - FATAL - Error detected - Exiting"
            print "$(date +"%Y%m%d%H%M") - Error detected : $answer"
            exit
        else
            Dummy+=$answer" "
        fi
    elif [[ locFlag -eq 1 ]]; then
        locFlag=0
        break
    else
        locFlag=1
    fi
done
##Response to array
SvrArray=( $Dummy )
##Do anything with the response, here just printing
for i in ${!SvrArray[@]}; do
        print "$i. ${SvrArray[$i]}"
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62449866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档