jboss-cli:如何使用 jboss-cli 读取一个特定系统 属性?

jboss-cli : How do I read one specific system property using jboss-cli?

我是 jboss-cli 的新手,正在使用 'jboss-cli recipes'。

问题

如何使用 jboss-cli 读取 一个特定的 属性?例如。

上下文

"CLI Recipes" 文档有这个有用的示例来获取 所有 系统属性。然而它 'too much infomration'。我想编写一个特定的阅读脚本 属性.

https://docs.jboss.org/author/display/WFLY10/CLI+Recipes#CLIRecipes-

Overview of all system properties in JBoss AS7+ including OS system properties and properties specified on command line using -D, -P or --properties arguments.

Standalone
[standalone@IP_ADDRESS:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)

提前致谢

这个 link 指出了我的答案:我可以使用 groovy 脚本来获取值。据我所知,"jboss-cli command line" 不提供这种灵活性。

https://developer.jboss.org/wiki/AdvancedCLIScriptingWithGroovyRhinoJythonEtc

解决方案

这是 jboss 家庭的解决方案。

[对于内存,您可以从“/core-service=platform-mbean/type=memory/:read-attribute(name=heap-memory-usage)”获得结果

bash

#!/bin/sh
# Note: must set jbbin to 'jboss home /bin'
groovy -cp $jbbin/client/jboss-cli-client.jar readJbossHome.groovy  

Groovy 注意:这是 'quick and dirty'。

import org.jboss.as.cli.scriptsupport.*  

cli = CLI.newInstance()  
cli.connect()  

// Define properties
myParentProp="system-properties"
myProp="jboss.home.dir"

// Retrieve and pluck values
result = cli.cmd("/core-service=platform-mbean/type=runtime:read-resource(recursive=true,include-runtime=false)")

myResult = result.getResponse().get("result")
myParentVal = myResult.get(myParentProp)
myVal = myParentVal.get(myProp)

// Print out results
println "Property detail ${myProp}  is ${myVal}"


cli.disconnect()  

你可以做一个:

:resolve-expression(expression=${jboss.home.dir})

您也可以通过 Wildfly 管理休息电话来完成。

  • http://localhost:9990/management
  • POST
  • Headers = Content-Type:application/json
  • Body = { “操作”:“resolve-expression”, “表达式”:“${jboss.home.dir}” }

您可以像这样使用 cli:

$JBOSS_HOME/bin/jboss-cli.sh -c --command=/system-property=MY_PROPERTY:read-resource

你得到这样的输出:

$JBOSS_HOME/bin/jboss-cli.sh -c --command=/system-property=MY_PROPERTY:read-resource
{
    "outcome" => "success",
    "result" => {"value" => "4.0"}
}

您可以通过管道将其提取为如下内容:

<cli command>  | grep "{\"value\"" | sed "s/.*value\" => \"\([^\"]*\)\".*//"

它有点难看,如果值是类似于“值”=>“值=”或一些可怕的东西,就会出现一些令人讨厌的边缘情况。 总的来说,这工作正常。

将 sed 命令更改为更具体一些以解决此问题。

通过较新的 Teiid DOC,我发现了一些有用的信息,我认为这可能有助于与遇到类似用例的人分享

https://access.redhat.com/documentation/en-us/jboss_enterprise_application_platform/6.3/html/administration_and_configuration_guide/configure_system_properties_using_the_management_cli

使用 jboss-cli

帮助添加、删除和读取系统属性

jboss-cli

如果你有像 ehsavoie 建议的 cli 命令 :resolve-expression(expression=${jboss.home.dir}) 并且想在 jboss-cli 中使用 "result" 属性 的内容] 你可以把它保存在一个变量中。您可以使用反引号 (`) 来计算表达式。

简单的表达

[standalone@localhost:9990 /] :resolve-expression(expression=${jboss.home.dir})
{
    "outcome" => "success",
    "result" => "/home/user/wildfly"
}

有效使用

[standalone@localhost:9990 /] set wildflydirectory=`:resolve-expression(expression=${jboss.home.dir})`
[standalone@localhost:9990 /] echo $wildflydirectory
/home/user/wildfly

PowerShell

如果您碰巧使用 PowerShell,您可以使用 one-liner 在 cli 的 --output-json 选项和 PowerShell 的 ConvertFrom-Json cmdlet 的帮助下提取甚至深层嵌套的结果。这样,James Roberts 使用 grep 和 sed 的方法的解析问题就消失了。

$value=(Invoke-Expression "./jboss-cli.ps1 -c --command=':resolve-expression(expression=`${jboss.home.dir})' --output-json" | ConvertFrom-Json).result

引用命令并转义正确的 PowerShell 特殊字符有点棘手。