【问题标题】:Restart WebSphere AppCluster with Jython使用 Jython 重新启动 WebSphere AppCluster
【发布时间】:2020-05-15 01:09:52
【问题描述】:

我想使用 Jython 在 WebSphere 8.5 中重新启动 AppCluster。

  cluster = AdminControl.completeObjectName('name=ICXTCluster,*')
  AdminControl.invoke(cluster, 'restart')

这不起作用:

ModelMBeanInfo 中没有重启操作

所以我尝试通过停止然后启动集群来手动实现重启:

  cluster = AdminControl.completeObjectName('name=ICXTCluster,*')
  AdminControl.invoke(cluster, 'stop')
  AdminControl.invoke(cluster, 'start')

它抛出另一个错误:

com.ibm.websphere.wlm.exception.ClusterException:启动操作失败,因为另一个管理操作:停止已在进行中。

停止似乎有效,ISC 向我显示 AppCluster 已停止。但它没有重新开始。我假设那些调用操作是异步的,所以AdminControl.invoke(cluster, 'start') 在上一次停止完成之前就被执行了。

如何停止集群同步?还是有其他方法可以重启?

【问题讨论】:

标签: websphere jython ibm-connections


【解决方案1】:

由于内置 Jython 命令似乎不可能,因此我编写了一个脚本,该脚本每 5 秒轮询一次集群状态并检查其是否等于所需状态。所以我们可以使用异步函数,通过等待服务器停止和启动来使它们同步:

import time
def set_state_sync(invoke_state, target_state):
    print 'Check state for ' + cluster_name
    cluster = AdminControl.completeObjectName('name=' + cluster_name + ',*')
    state = AdminControl.getAttribute(cluster, 'state')
    print 'Initial state: ' + state
    if state == target_state:
        print 'State is already ' + target_state
        return

    print '[Changed]: Invoke state ' + invoke_state
    AdminControl.invoke(cluster, invoke_state)

    max_wait = 300
    interval = 5
    waited = 0
    while state != target_state:
        time.sleep(interval)
        state = AdminControl.getAttribute(cluster, 'state')
        print 'State poll: ' + state
        waited += interval
        if waited > max_wait:
            print 'Error: Timed out after ' + max_wait + ' seconds!'
            exit()
    return

cluster_name = '{{ cluster_name }}'
set_state_sync('stop', 'websphere.cluster.stopped')
set_state_sync('start', 'websphere.cluster.running')
print 'Finished Restarting'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多