首页 > 解决方案 > 使用 Jython 获取 AppServer 的当前重启策略状态 (nodeRestartState)

问题描述

我想使用 Jython 获取 AppServer 的当前重启策略(RUNNING、STOPPED 或 PREVIOUS)。

servers = AdminTask.listServers('[-serverType APPLICATION_SERVER]').splitlines()
for server in servers:
  print server
  print AdminConfig.showAttribute(server, "monitoringPolicy")
  break

这给了我一个属性无效的例外:

执行文件“test.py”时发生异常。有关异常的信息:com.ibm.ws.scripting.ScriptingException:WASX7080E:类型“Server”--“monitoringPolicy”的属性无效。

但我可以使用以下方式获取属性print AdminConfig.showall(server)

...
[monitoringPolicy [[autoRestart true]
[maximumStartupAttempts 3]
[nodeRestartState STOPPED]
[pingInterval 60]
[pingTimeout 300]]]
...

对我来说,它看起来像是monitoringPolicy一个数组的键,因此应该可以通过

policy = AdminConfig.showAttribute(server, "monitoringPolicy")
restartState = policy["restartState"] # Should be "STOPPED"

问题出在哪里?

编辑

在更深入地查看列表输出后,我发现我错过了一个顶级属性processDefinitions,它是monitoringPolicy.

pd = AdminConfig.showAttribute(server, "processDefinitions")
print pd

这打印:

[(cells/CnxCell/nodes/CnxNode01/servers/UtilCluster_server1|server.xml#JavaProcessDef_1578492353152)]

但我无法从此对象获取任何子属性:

# TypeError: sequence subscript must be integer or slice
print pd["monitoringPolicy"]

# AttributeError: 'string' object has no attribute 'monitoringPolicy'
print pd.monitoringPolicy

标签: webspherejython

解决方案


MonitoringPolicy 有自己的类型。这会打印服务器和状态,所以 'RUNNING', 'STOPPED'

servers = AdminTask.listServers('[-serverType APPLICATION_SERVER]').splitlines()
for server in servers:
    print(server)
    mpol = AdminConfig.list("MonitoringPolicy", server)
    print(AdminConfig.showAttribute(mpol, 'nodeRestartState'))

推荐阅读