如何使用wsadmin(Jython)停止特定节点上的Web服务器?
使用wsadmin停止特定节点上的Web服务器及查询语句问题解决
为什么你的AdminControl.queryNames返回空值?
AdminControl操作的是运行时MBean对象,如果目标Web服务器未启动,或者对应节点的节点代理(Node Agent)未运行,就查不到对应的运行时实例,自然返回空值。- 另一个常见原因是查询条件不够精确,比如节点名称拼写错误,或者缺少Web服务器名称、Cell名称等关键匹配条件。
正确的查询与停止步骤
步骤1:确认目标Web服务器的配置信息
先通过AdminConfig获取所有Web服务器的配置详情,明确节点名称和Web服务器名称的准确值:
# 列出所有Web服务器配置 webServers = AdminConfig.list('WebServer').splitlines() # 遍历输出每个Web服务器的核心信息 for ws in webServers: ws_name = AdminConfig.showAttribute(ws, 'name') ws_node = AdminConfig.showAttribute(ws, 'nodeName') print(f"Web服务器名称: {ws_name}, 所属节点: {ws_node}")
步骤2:精确查询运行时Web服务器对象
如果要通过AdminControl查询,需确保节点代理和Web服务器处于运行状态,再使用精确的查询条件:
# 替换为你的目标节点名称和Web服务器名称 target_node = 'mynode' target_ws_name = 'yourWebServerName' # 构建精确查询语句 webserver_runtime = AdminControl.queryNames(f'type=WebServer,node={target_node},name={target_ws_name},*') if webserver_runtime: # 发送停止指令 AdminControl.invoke(webserver_runtime, 'stop') print(f"已向Web服务器 {target_ws_name} 发送停止指令") else: print("未找到运行时Web服务器实例,请检查以下内容:") print("- 目标节点的节点代理(Node Agent)是否已启动") print("- 目标Web服务器本身是否处于运行状态") print("- 节点名称和Web服务器名称是否拼写正确")
步骤3:无需运行时查询的停止方法(推荐)
如果不确定Web服务器运行状态,或者不想依赖运行时MBean,可以直接通过配置信息调用AdminTask停止:
target_node = 'mynode' target_ws = None # 遍历找到目标节点上的Web服务器配置 for ws in AdminConfig.list('WebServer').splitlines(): if AdminConfig.showAttribute(ws, 'nodeName') == target_node: target_ws = ws break if target_ws: ws_name = AdminConfig.showAttribute(target_ws, 'name') # 执行停止操作 AdminTask.stopWebServer(f'[-webServerName {ws_name} -nodeName {target_node}]') # 保存配置(如需持久化操作) AdminConfig.save() print(f"已触发Web服务器 {ws_name} 的停止操作") else: print(f"节点 {target_node} 上未找到Web服务器配置")
内容的提问来源于stack exchange,提问作者mila002
相关产品推荐
相关产品推荐

