Перезапустите WebSphere AppCluster с помощью Jython. - PullRequest
0 голосов
/ 29 января 2020

Я хочу перезапустить AppCluster в WebSphere 8.5, используя Jython.

  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: запуск операции не выполнен, поскольку другая административная операция: останов уже выполняется .

Кажется, остановка работает, IS C показывает мне AppCluster как остановленный. Но это не началось снова. Я предполагаю, что эта операция вызова является асинхронной, поэтому AdminControl.invoke(cluster, 'start') был выполнен до завершения предыдущей остановки.

Как я могу остановить синхронизацию кластера? Или есть другой способ перезапустить его?

1 Ответ

0 голосов
/ 29 января 2020

Так как встроенные команды Jython кажутся невозможными, я написал скрипт, который опрашивает состояние кластера каждые 5 секунд и проверяет, соответствует ли оно желаемому состоянию. Таким образом, мы можем использовать функции asyn c и синхронизировать их c, ожидая остановки и запуска сервера:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...