从 shell 脚本调用 JMX MBean 方法
是否有任何库允许我从shell脚本调用JMX MBean方法。我们通过JMX公开一些操作/管理命令,我们可以让我们的管理员使用JConsole或VisualVM,但有些任务最好留给自动化。在这种自动化中,我们希望能够在正在运行的服务器上调用JMX MBean方法,最好是从shell脚本调用。
是否有任何库允许我从shell脚本调用JMX MBean方法。我们通过JMX公开一些操作/管理命令,我们可以让我们的管理员使用JConsole或VisualVM,但有些任务最好留给自动化。在这种自动化中,我们希望能够在正在运行的服务器上调用JMX MBean方法,最好是从shell脚本调用。
以下命令行 JMX 实用程序可用:
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 example:
如果您有
使用名为:
然后你可以写一个简单的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
我开发了jmxfuse,它将JMX Mbeans公开为Linux FUSE文件系统,具有与/proc fs类似的功能。它依靠Jolokia作为JMX的桥梁。公开属性和操作以进行读取和写入。
http://code.google.com/p/jmxfuse/
例如,要读取属性:
me@oddjob:jmx$ cd log4j/root/attributes
me@oddjob:jmx$ cat priority
写入属性:
me@oddjob:jmx$ echo "WARN" > priority
调用操作:
me@oddjob:jmx$ cd Catalina/none/none/WebModule/localhost/helloworld/operations/addParameter
me@oddjob:jmx$ echo "myParam myValue" > invoke