1. ホーム
  2. java

[解決済み] シェルスクリプトからJMX MBeanメソッドを呼び出す

2022-12-06 21:02:32

質問

シェルスクリプトからJMX MBeanメソッドを呼び出すことを可能にするライブラリはありますか。私たちは JMX を通していくつかの操作/管理コマンドを公開し、管理者に JConsole または VisualVM を使用させることができますが、いくつかのタスクは自動化に任せた方がよいでしょう。その自動化において、私たちは、できればシェルスクリプトから、実行中のサーバー上の JMX MBean メソッドを呼び出すことができるようにしたいと思っています。

どのように解決するのですか?

以下のコマンドラインJMXユーティリティが利用可能です。

  1. jmxterm - は、最も完全な機能を備えたユーティリティのようです。
  2. cmdline-jmxclient - WebArchive プロジェクトで使用されているものは、非常にシンプルです(2006 年以降、開発されていないようです)。
  3. GroovyスクリプトとJMX - は本当に強力なJMXの機能を提供しますが、groovyと他のライブラリのセットアップが必要です。
  4. JManage コマンドライン 機能 - (欠点は JManage サーバが動作している必要があることです。 サーバーが必要です)

Groovy JMXの例です。

import java.lang.management.*
import javax.management.ObjectName
import javax.management.remote.JMXConnectorFactory as JmxFactory
import javax.management.remote.JMXServiceURL as JmxUrl

def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi'
String beanName = "com.webwars.gameplatform.data:type=udmdataloadsystem,id=0"
def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection
def dataSystem = new GroovyMBean(server, beanName)

println "Connected to:\n$dataSystem\n"

println "Executing jmxForceRefresh()"
dataSystem.jmxForceRefresh();

cmdline-jmxclient の例です。

もしあなたが

  • MBean: com.company.data:type=datasystem,id=0

というOperationを持つ。

  • jmxForceRefresh()

それから、簡単なbashスクリプトを書くことができます (ダウンロードした cmdline-jmxclient-0.10.3.jar をダウンロードし、スクリプトと同じディレクトリに置くと仮定します)。

#!/bin/bash

cmdLineJMXJar=./cmdline-jmxclient-0.10.3.jar
user=yourUser
password=yourPassword
jmxHost=localhost
port=9003

#No User and password so pass '-'
echo "Available Operations for com.company.data:type=datasystem,id=0"
java -jar ${cmdLineJMXJar} ${user}:${password} ${jmxHost}:${port} com.company.data:type=datasystem,id=0

echo "Executing XML update..."
java -jar ${cmdLineJMXJar} - ${jmxHost}:${port} com.company.data:type=datasystem,id=0 jmxForceRefresh