websphere - 使用 Jython 重新启动 WebSphere AppCluster
问题描述
我想使用 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')
在上一次停止完成之前执行。
如何停止集群同步?还是有其他方法可以重新启动它?
解决方案
由于内置 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'
推荐阅读
- react-native - React-Native Styled-Components attrs 动态样式
- python - python - for 循环的自动化以覆盖 dict 中任意数量的键
- python - 在 Django 中一次提交两个表单
- c# - 通过DataWriter c#发送自定义数据
- android - 试图从另一个测试应用程序的共享首选项文件中读取值
- c - C使用动态分配从文件中读取行和空格
- r - 闪亮:环境变量与反应值
- javascript - redux-saga 任务取消
- .net - 为请求响应模型选择 RabbitMq 交换类型
- wolfram-mathematica - 如何计算上图中标记之间的距离作为 wolfram mathematica 上的像素?