内容


IBM WebSphere 开发者技术期刊

WebSphere Application Server V6 系统管理——第 4 部分

最新的 AdminTask 命令使 wsadmin 脚本更加简单实用

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: IBM WebSphere 开发者技术期刊

敬请期待该系列的后续内容。

此内容是该系列的一部分:IBM WebSphere 开发者技术期刊

敬请期待该系列的后续内容。

来自 IBM WebSphere 开发者技术期刊

引言

IBM WebSphere Application Server V6 相比上一个版本 V5,在系统管理功能方面进行了许多重要的改进。本系列文章深入探讨了 WebSphere Application Server V6 在系统管理方面的长足进步,并且系列中的每篇文章都详细介绍了具体的某一功能。截止到目前,这些文章包括:

本系列还将不断增添新的文章。

什么是 AdminTask?

wsadmin 脚本工具引入于 IBM WebSphere Application Server V5。它是一个使用脚本语言的非图形化管理命令接口。wsadmin 目前只支持 Jython 和 Jacl 两种脚本语言。wsadmin 工具通过使用下列 WebSphere 特定对象,对基本的脚本语言进行了扩展:

  • AdminConfig——用于运行配置命令。
  • AdminApp——用于执行应用程序管理。
  • AdminControl——用于运行操作命令。

通过使用 wsadmin 工具,管理员能够替代正在运行的管理控制台来配置、部署和管理 WebSphere Application Server 的多种元素。而且,用户能够使用脚本语言的固有功能(开发脚本)将 wsadmin 命令组合使用,从而自动化用户自定义的管理过程。

wsadmin 工具是一款强大的工具,用户通过它能够实际调节 WebSphere Application Server 所提供的每个调节器——前提是用户知道调节那个调节器和如何调节这个调节器(这两个知识点都比较难于掌握)。例如,如果使用 AdminConfig,您就应当了解该配置文档的架构和目录结构;如果使用 AdminControl,您就应当在操作运行时组件之前了解这些组件的 JMX MBean 类型。换言之,管理员在高效使用这些命令之前需要了解 WebSphere Application Server 及其环境的许多低级信息。AdminApp 的使用大大改观了这种情况。AdminApp 通过提供直接与用户目标(例如,应用程序的“安装”或“卸载”)相关的命令,大大简化了上述管理任务。但 AdminApp 只提供了应用程序部署功能。整体来看,wsadmin 命令为 V5 用户提供了一条较短的学习曲线。

若将 AdminApp 的易用性扩展到其他管理区域(例如,配置和操作)岂不是很完美?最新的 AdminTask 对象的开发正是根植于这种思想,并在 WebSphere Application Server V6.0 中初次亮相。AdminTask 不仅为各种管理功能提供了用户友好且面向任务的命令,同时也使用了与 AdminApp 命令相同的语法。AdminTask 也提供了增强的可用性,从而帮助用户真正找到满足自己需要的命令,理解命令的用途和学习语法。

有关 AdminTask 命令和语法的详细信息请参阅 WebSphere Application Server V6 信息中心。在本文中,我们将通过一些命令和脚本示例探讨各种 AdminTask 命令,并指导读者使用这些新命令高效地管理 WebSphere Application Server 环境。

命令语法

让我们观察一组示例 AdminTask 命令,以说明这些命令的的基本语法。首先应该知道的是,访问 AdminTask 命令同访问其他 wsadmin 命令的方式是相同的。这表明,您可以通过输入下列命令(如果正在使用 Windows® 平台)开始:

语言命令
Jythoncd <PROFILE_DIRECTORY>\bin .\wsadmin.bat -lang jython
Jacl.\wsadmin.bat -lang jacl (Jacl)

所有 AdminTask 命令以 AdminTask 开始。每条命令完成一个特定的任务,并且拥有一个“顾名思义”的名称。(默认情况下,概要目录会在 <PRODUCT_INSTALL_DIRECTORY>\profiles\<PROFILE_NAME> 之下。请参阅本系列文章的第 3 部分,了解有关概要文件和概要目录的概念。)

无参数命令

最简单的 AdminTask 命令是执行时没有参数的命令,它的基本语法是 AdminTask 后跟命令名。例如,命令 listServerTypes 会列出系统中定义的所有服务器类型。如果您使用 Jython 的 wsadmin 命令解释器执行以下命令:

wsadmin>print AdminTask.listServerTypes()

结果将是:

APPLICATION_SERVER
WEB_SERVER
GENERIC_SERVER

这种语法适用于所有不需要附加参数的命令。下面是另一个例子:

语言命令
Jythonwsadmin>print AdminTask.listServers()
Jaclwsadmin>$AdminTask listServers

使用 Jacl 脚本语言的输出结果应当如下:

server1(cells/myHostCell/nodes/myHost/servers/server1|server.xml)
nodeagent(cells/myHostCell/nodes/myHost/servers/nodeagent|server.xml)
dmgr(cells/myHostCell/nodes/myHostCellManager/servers/dmgr|server.xml)

listServer 命令的输出表明该配置中定义了 3 个服务器:一个部署管理器、一个节点代理和一个应用程序服务器。

一个有关格式化的单词

在本文中,您会注意到在 AdminTask 命令之前使用了 print。这并不是该命令语法的一部分。它只是为了增加可读性而对输出进行了格式化处理。在脚本文件中,不必添加“print”到 AdminTask 命令中。如果没有 print,Jython 中的命令如下:

wsadmin>AdminTask.listServerTypes()

未进行格式化的原始输出如下:

'APPLICATION_SERVER\r\nWEB_SERVER\r\nGENERIC_SERVER'

使用 Jacl 作为脚本语言,您可以启动 wsadmin 命令解释器并执行相同的命令:

wsadmin>$AdminTask listServerTypes

得到相同的输出结果:

APPLICATION_SERVER
WEB_SERVER
GENERIC_SERVER

Jacl 不需要为格式化使用 print

有参数命令

以上使用的 listServers 命令拥有一个可选参数“serverType”,该参数用于列出所有指定服务器类型的服务器。因此,为查看所有类型为“应用程序服务器”的服务器,我们可以在命令中指定以下参数值:

语言命令
Jythonwsadmin>print AdminTask.listServers('[-serverType APPLICATION_SERVER]')
Jaclwsadmin>$AdminTask listServers {-serverType APPLICATION_SERVER}

输出如下:

server1(cells/myHostCell/nodes/myHost/servers/server1|server.xml)

相同命令的附加参数可以通过类似方式指定。例如,添加一个“nodeName”参数来列出有关唯一指定节点的服务器:

语言命令
Jythonwsadmin>AdminTask.listServers('[-serverType APPLICATION_SERVER -nodeName myHost ]')
Jaclwsadmin>$AdminTask listServers {-serverType APPLICATION_SERVER -nodeName myHost}

在上述命令中,“myHost”是参数“nodeName”的值。如果需要指定其他参数,只需以相同方式将它们添加到后面即可。该语法也适用于其他带有参数的命令。

使用目标对象的命令

除参数之外,某些 AdminTask 命令也使用目标对象,它是 AdminTask 命令操作的目标资源。以下的 createApplicationServer 命令在系统中创建了一个应用程序服务器,并且使用节点名作为一个目标对象。该命令在节点名“myHost”上创建了一个称为“testServer”的应用程序服务器:

语言命令
Jythonwsadmin>AdminTask.createApplicationServer('myHost', '[-name testServer ]')
Jaclwsadmin>$AdminTask createApplicationServer myHost {-name testServer}

目标对象可能是“必需的”也可能是“可选的”。

使用内置帮助获取命令信息

在您使用某一命令前,是否需要了解有关此命令的更多信息?您不仅可以从 WebSphere Application Server V6 信息中心 获取命令、目标和参数信息,也可以使用以下命令获得 wsadmin 提供的内置帮助:

语言命令
Jythonwsadmin>print AdminTask.help()
Jaclwsadmin>$AdminTask help

使用该帮助命令的附加参数获取特定命令的信息:

语言命令
Jythonwsadmin>print AdminTask.help('COMMAND_NAME')
Jaclwsadmin>$AdminTask help COMMAND_NAME

如果我们使用值“createApplicationServer”替换 COMMAND_NAME,您应当看到如下显示:

WASX8006I: Detailed help for command: createApplicationServer
Description: Command that creates a server
*Target object: The Node Name
Arguments:
  *name - The Server Name
  templateName - The Template Name
  genUniquePorts - Parameter to generate unique http ports for a server.
  templateLocation - The location where the template is stored. Use system defined 
location if it is not specified. Using system defined location is recommended.
Steps:
   ConfigCoreGroup - No description available

内置帮助功能显示的多数信息都简单明了,星号(*)代表必需的。帮助信息已经过本地化处理,因此包含多个国家的语言。该帮助功能旨在帮助您使用适当的选项快速输入需要的命令。

通过交互模式生成正确的语法

因为现在您已知道了语法规则,我们将指出记住这些规则并不重要,因为每个 AdminTask 命令都有一个 -interactive 选项,该选项让您能够交互地输入目标对象和任意参数。wsadmin 工具执行该命令后会要求输入具体值,然后构造出正确的命令语法。

使用该交互选项的命令格式是:

语言命令
Jythonwsadmin>AdminTask.COMMAND_NAME('-interactive')
Jaclwsadmin>$AdminTask COMMAND_NAME -interactive

以下是 createApplicationServer 命令以交互模式执行的示例,它会默认为一个已创建的服务器生成一个唯一端口号,以避免该服务器启动时发生端口冲突。在该示例中:

  • 粗体表示用户输入。
  • {ret} 代表回车键。
  • * 表示一个必需的字段。您可以通过按回车键,绕过可选参数值的输入,如以下示例所示。
  • 中括号中的文字表示参数名称。
  • 小括号中的文字表示参数的默认值。

该命令有多个步骤,这些步骤我们将在接下来的部分看到。目前,我们将绕过这些步骤并通过选择 Finish 选项完成该命令。

使用 Jython:

wsadmin>AdminTask.createApplicationServer('-interactive')[ret]
Create Server
Command that creates a server
*Node Name: myHost{ret}
*Server Name (name): testServer{ret}
Template Name (templateName): {ret}
Generate Unique Ports (genUniquePorts): [true] {ret}
template location (templateLocation): {ret}
Create Server
Command that creates a server
->  1. No description available (ConfigCoreGroup)
S (Select)
F (Finish)
C (Cancel)
H (Help)
Select [S, F, C, H]: [F] {ret}
WASX7278I: Generated command line: AdminTask.createApplicationServer(myHost, '[-name 
testServer ]')
'testServer(cells/myHostCell/nodes/myHost/servers/testServer|server.xml#Server_11242
32687936)'

交互模式的执行主要出于以下原因:

  • 它使用户不需知道实际的命令语法,就能够执行命令。这尤其方便了偶尔使用 wsadmin 命令的用户。

  • 交互模式按照您的需要生成正确的命令语法,这使它成为学习命令和生成管理脚本实际命令的优秀工具。

Jacl 中的 AdminTask 也支持相同的功能和基本相同的函数,主要区别是 Jacl 生成的命令行不同。

使用 Jacl:

wsadmin>$AdminTask createApplicationServer -interactive
Create Server
Command that creates a server
*Node Name: myHost{ret}
*Server Name (name): testServer{ret}
Template Name (templateName): {ret}
Generate Unique Ports (genUniquePorts): [true] false{ret}
template location (templateLocation): {ret}
Create Server
Command that creates a server
->  1. No description available (ConfigCoreGroup)
S (Select)
F (Finish)
C (Cancel)
H (Help)
Select [S, F, C, H]: [F] {ret}
WASX7278I: Generated command line: 
$AdminTask createApplicationServer myHost {-name testServer} 
testServer(cells/myHostCell/nodes/myHost/servers/testServer|server.xml#Server_11242351489
25)

使用多个步骤的 AdminTask 命令

某些管理任务相对来说比较复杂,需要使用更多的参数,涉及更多的流或步骤(根据用户的选择)。某个任务的某些步骤也可能会使用一个数据表,表中每列映射为该步骤中的一个参数。这类任务的示例可能会是应用程序的安装。在该过程中,用户需要执行的步骤将根据应用程序类型、选择的安装选项和每个应用程序的模块数量等等发生变化。在这里,步骤的概念类似于与 AdminApp 命令相关联的任务的概念。实际上,AdminTask 中步骤的语法与 AdminApp 安装和更新命令的语法相同。

我们将首先从一个交互的视点观察使用步骤的命令的语法。如果您仅仅是偶尔需要执行复杂的命令,交互模式可能是您的最佳选择。让我们再次观察 createApplicationServer 命令的交互模式执行,就像上一部分所做的那样。但是,这次不只是完成 (Finish),我们将选择 (Select) 执行随后的“ConfigCoreGroup”步骤:

Select [S, F, C, H]: [F] S{ret}
No description available (ConfigCoreGroup)
No description available (coregroupName):
Select [C (Cancel), E (Edit)]: [E] E{ret}

以上显示的最后一行,提示用户或者编辑 (E) 该步骤参数,或者取消 (C) 退出该步骤。输入 E 编辑该步骤。交互显示提示用户输入核心组的名称。您可以如下所示输入 DefaultCoreGroup,或者按回车键接受默认值(因为它不是必需的)。没有标出“必需的”参数的步骤是可选的(这就是我们能够在上一部分跳过该步骤的原因)。

No description available (coregroupName): DefaultCoreGroup{ret}

返回主菜单,选择 F 完成。作为结果的命令语法和执行结果如下所示。代表该步骤的命令显示为粗体。

Create Server
Command that creates a server
    1. No description available (ConfigCoreGroup)
->  End of task
F (Finish)
C (Cancel)
H (Help)
Select [F, C, H]: [F] {ret}
WASX7278I: Generated command line: AdminTask.createApplicationServer(myHost, '[-name 
testServer -ConfigCoreGroup [[DefaultCoreGroup]]]')
'testServer(cells/myHostCell/nodes/myHost/servers/testServer|server.xml#Server_11261
91505917)'

就如您在本例中所看到的,除参数名称使用了步骤名称代替之外,步骤参数的指定类似于其他参数。但某些步骤接受表作为输入,在这种情况下,参数的值是一个表:

  • 表列对应于步骤的参数。
  • 表的格式为两层中括号。外层的中括号包含了步骤的整个表,内层的中括号是表中的一行。

如果步骤没有使用表作为输入,例如本例,那么语法上等同于只使用了单行的表。步骤的所有参数值按照顺序指定,并且在内层中括号内使用空格分开。如过某个参数值包括空格,那么该参数值必需使用双引号括入。例如,如果核心组名称为“my core group”,那么步骤的命令语法将是:

AdminTask.createApplicationServer(myHost, '[-name testServer -ConfigCoreGroup [["my core group"]]]')

这种格式看起来可能有些重复和复杂,但这种语法与 AdminApp 命令是一致的,并且在需要指定表数据时,使输入变得更加高效。然而,您可以一直使用交互模式执行,从而不必担心是否遗漏引号。

如果使用 Jacl,语法类似于上述的 Jython 命令,主要区别是 Jacl 使用大括号代替了中括号:

WASX7278I: Generated command line: $AdminTask createApplicationServer myHost {-name testServer -ConfigCoreGroup {{DefaultCoreGroup}}}

查找正确的 AdminTask 命令

所有 AdminTask 命令都记录在 WebSphere Application Server V6 信息中心,可以使用“AdminTask commands”搜索。内置的 AdminTask 帮助也能够帮助您找到正确的命令。按照以下命令能够列出所有可用的命令:

语言命令
Jythonwsadmin>$AdminTask help -commands
Jaclwsadmin>$AdminTask COMMAND_NAME -interactive

当然,按字母顺序排列的命令列表对您也许没什么帮助。为了缩小搜索范围,命令组(接下来的部分)的概念将会非常有用。

使用命令组

AdminTask 命令基于功能被分组,命令组的主要意图是将相关的命令集合到一起,从而使用户能够轻松直观地找到需要的命令。例如,ServerManagement 命令组包含了所有与服务器管理相关的命令。使用以下命令可以查看所有带有简短描述的已定义的命令组列表:

语言命令
Jythonwsadmin>print AdminTask.help('-commandgroups')
Jaclwsadmin>$AdminTask help -commandgroups

得到与指定命令组关联的命令列表:

语言命令
Jythonwsadmin>print AdminTask.help('COMMAND_GROUP_NAME')
Jaclwsadmin>$AdminTask help COMMAND_GROUP_NAME

例如,为显示与 ServerManagement 命令组相关联的命令的名称和描述:

语言命令
Jythonwsadmin>print AdminTask.help('ServerManagement')
Jaclwsadmin>$AdminTask help ServerManagement

可用的 AdminTask 命令

通过列出命令组(上述),您大体了解了 AdminTask 命令所覆盖的主要功能区域。通常,这些区域包括服务器管理、集群管理、J2C 资源适配器、与配置相关的消息传递、核心组配置、Web 服务和通道框架等等。如果您不能找到期望 AdminTask 支持的命令,请记住由于 AdminTask 引入于第 6 版的 WebSphere Application Server,所以该版本许多新的可用的功能和函数会首先得到 AdminTask 机制的支持,与此同时对以前版本中已有的功能和函数的支持仍会在不久出现。

尽管如此,AdminTask 的目的并不在于取代 AdminConfig 或 AdminControl。AdminConfig 和 AdminControl 提供使用更加复杂的语法的低级接口,AdminTask 提供简化普通管理任务的高级机制。

在 wsadmin 脚本内使用 AdminTask

由于 AdminTask 同 AdminConfig、AdminControl 和 AdminApp 一样都是 wsadmin 命令,所以它们可以同其他 wsadmin 命令一起以相同的方式使用。例如,如果您打算实施自动化应用程序配置和部署的普通方案,您将执行以下任务,这些任务是由各种 wsadmin 命令共同合作完成:

  1. 创建服务器 (AdminTask)
  2. 修改服务器的配置 (AdminConfig)
  3. 配置应用程序所需的数据源 (AdminConfig)
  4. 为应用程序配置消息传递总线和目的地 (AdminTask)
  5. 配置应用程序需要的 JMS 资源 (AdminTask)
  6. 安装应用程序 (AdminApp)
  7. 保存 (AdminConfig)
  8. 同步并启动服务器和应用程序 (AdminControl)

由于可以利用的 AdminTask 命令越来越多,所以您可以使用任何最新最适用的 AdminTask 命令替换当前脚本中所包含的较为复杂的 AdminConfig 命令,从而简化脚本并降低维护成本。

在 AdminTask 命令中使用变量

在交互模式中,文本参数值通常在 AdminTask 命令执行时指定。当从脚本中调用 AdminTask 命令时,用户通常更期望(和实际需要)为命令参数指定变量而不是文本。变量名可以使用 wsadmin 命令,同时也可以使用其它任何内置的 Jython 和 Jacl 脚本命令。但您需要小心使用 AdminTask 命令中的标点符号,以避免出现错综复杂的问题。

在 Jython 中,变量名直接通过名称引用。但所有参数值都使用单引号括入,这使单引号中的内容成为了字符串。引用单引号内变量的最简便方法是把字符串分为几段,然后再使用加号 (+) 将它们连接到一起。就以 createApplicationServer 命令为例,我们可以分别使用变量 node、name 和 coregroup 来代替 myHost、testServer 和 DefaultCoreGroup,这种方式类似于 Java 代码,如下所示:

wsadmin>node='myHost'
wsadmin>name='testServer'
wsadmin>coregroup='DefaultCoreGroup'
wsadmin>AdminTask.createApplicationServer(node, '-name ' + name + ' 
-ConfigCoreGroup [[' + coregroup + ']]]')

在 Jacl 中,变量是通过 $VARIABLE_NAME 引用,所以通常只需使用合适的 $VARIABLE_NAME 来替换参数的文本值即可。但 AdminTask 语法中的多个大括号或一对大括号能将变量的引用变为字符串。这个规则也适用于其他包含大括号的 wsadmin 命令。这里有一个技巧:在最外层的大括号前面执行 subst 命令,从此不管存在多少层大括号,该命令都会将变量引用代之为其实际值。还以 createApplicationServer 命令为例,我们可以使用变量 node、name 和 coregroup 来代替 myHost、testServer 和 DefaultCoreGroupUsing,如下所示:

wsadmin>set name testServer
wsadmin>set node myHost
wsadmin>set coregroup DefaultCoreGroup
wsadmin>$AdminTask createApplicationServer $node [subst {-name $name -ConfigCoreGroup 
{{$coregroup}}}]

结束语

AdminTask 引入于 WebSphere Application Server V6,它提供了一套高级的、用户友好的、面向任务的 wsadmin 命令。AdminTask 简单的语法、内置的帮助功能和交互执行功能,使它能够更加轻松地在实际配置和操作方案中使用 wsadmin 命令,并减轻了自动化 WebSphere Application Server 配置及管理功能的工作负担。本文通过示例介绍了这些新命令,以帮助读者开始高效管理 WebSphere Application Server 环境。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=97078
ArticleTitle=IBM WebSphere 开发者技术期刊: WebSphere Application Server V6 系统管理——第 4 部分
publish-date=10242005