[英]jboss-cli : How do I read one specific system property using jboss-cli?
我是 jboss-cli 的新手,正在研究“jboss-cli 食譜”。
問題
我如何使用 jboss-cli 讀取一個特定的屬性? 例如
語境
“CLI Recipes”文檔有這個有用的示例來獲取所有系統屬性。 但是它的“信息太多”。 我想編寫讀取一個特定屬性的腳本。
https://docs.jboss.org/author/display/WFLY10/CLI+Recipes#CLIRecipes-
JBoss AS7+ 中所有系統屬性的概述,包括 OS 系統屬性和在命令行上使用 -D、-P 或 --properties arguments 指定的屬性。
Standalone
[standalone@IP_ADDRESS:9999 /] /core-service=platform-mbean/type=runtime:read-attribute(name=system-properties)
提前致謝
你可以做一個:
: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\" => \"\([^\"]*\)\".*/\1/"
它有點難看,如果值是“值”=>“值=”或一些可怕的東西,那么會有一些令人討厭的邊緣情況。 一般來說,這可以正常工作。
將 sed 命令更改為更具體一點以解決該問題。
此鏈接為我指出了答案:我可以使用 groovy 腳本來獲取值。 從我看來,“jboss-cli 命令行”沒有提供這種靈活性。
https://developer.jboss.org/wiki/AdvancedCLIScriptingWithGroovyRhinoJythonEtc
解決方案
這是jboss home的解決方案。
[對於內存,您可以從“/core-service=platform-mbean/type=memory/:read-attribute(name=heap-memory-usage)”獲得結果
猛擊
#!/bin/sh
# Note: must set jbbin to 'jboss home /bin'
groovy -cp $jbbin/client/jboss-cli-client.jar readJbossHome.groovy
Groovy注意:這是“又快又臟”。
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()
您也可以通過 Wildfly 管理休息電話來完成。
使用較新的 Teiid DOC,我發現了一些有用的信息,我認為這可能有助於與遇到類似用例的人分享
使用 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,則可以在 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 特殊字符有點棘手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.