AIX命令参考大全,卷 2,d - h - dsh 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 2,d - h

dsh 命令

用途

dsh — 并发地将远程 shell 命令发到多台主机和格式结果。

语法

dsh -q

dsh [-a] [-c] [-i ] [-h] [-m] [-q] [-v] [-s] [-z] [-S csh | ksh] [-L] [-l login_name] [-n node_list | -] [-w [node_list] | - ] [-N nodegroups] [-o "remote_shell_options"] [-r remote_shell_path] [-f fanout_value] [-t timeout] [-R | --reports directory] [--log pathname/filename] [-W | --noFileWriting] [command]

描述

dsh 命令在一组节点上并发地调用命令。它为每个指定的节点并发发出远程 shell 命令并从所有节点返回输出,输出经过格式化,这样可以管理来自所有节点的命令结果。/usr/bin/rsh 是语法和安全性的模型。

命令发送到节点的设置可以通过两种方式确定:

首选方法是节点列表。节点列表从以下情况之一的第一个实例获得:

  1. 当使用了 -n 标志时,在命令行指定主机名列表。当使用了 -N 标志时,在命令行指定节点组列表。
  2. DSH_LIST 环境变量命名的文件的内容。节点列表文件格式是每行一个主机名。忽略以 # 开始的空白行和注释行。

另一种方法叫作工作集体。工作集体从以下情况之一的第一个实例获得:

  1. 当使用了 -w 标志时,在命令行指定主机名列表。当使用了 -N 标志时,在命令行指定节点组列表。
  2. WCOLL 环境变量命名的文件的内容。工作集体文件格式是每行一个主机名。忽略以 # 开始的空白行和注释行。

如果使用此方法时不存在节点列表或工作集体,则发生错误,且不发出任何命令。

如果节点用多于一个的方式指定,那么只使用优先级最高的指定,如下所示:

  1. -n 标志
  2. -w 标志
  3. DSH_LIST
  4. WCOLL

如果没有指定 command 参数,则 dsh 从命令行或者标准输入读取行,并且在节点列表或工作集体的每个主机上将每个输入作为命令发出。这些命令使用远程 shell 命令的语法。

要退出 dsh 命令行式,在命令行输入 exit,或者在 dsh 提示符处按下 Enter 键。

当命令在远程节点解析时,使用的路径是用用户指定的 DSH_PATH 环境变量确定的。如果没有设置 DSH_PATH,则使用的路径是远程 shell 缺省路径。(例如,设置源节点代码上路径集的 DSH_PATH,请使用 DSH_PATH=$PATH)。

dsh 直接在本地主机上运行命令,而不是使用远程 shell,除非使用了 -l 标志

并发远程 shell 命令的最大数目可用散发 -f 标志或使用 DSH_FANOUT 环境变量来指定。如果愿意的话,可以通过指定散发值 1 获取连续的调用。散发维持在指定的散发值上。当节点上一个命令完成时,启动另一个命令。如果未用 DSH_FANOUT 环境变量或 -f 标志配置散发值,则将使用缺省散发值 64。dsh 运行的每个远程 shell 命令 都需要一个保留的 TCP/IP 端口,每个节点只有 512 个这样的端口可用。

如果 -s 标志指定了流方式而不是散发方式,则当命令在该节点上完成后从每个节点返回输出,而不是在返回结果前等待命令在所有节点上完成。这可以改善性能,但会造成输出无序。

如果退出值非零,那么远程 shell 命令的退出值显示在来自 dsh 命令的消息中。来自远程 shell 的非零返回码表示远程 shell 遇到了问题。这与远程发出命令的退出代码是不相关的。如果远程 shell 遇到问题,则该节点就从当前节点列表中除去。使用 -z 标志以从在远程节点上发出的最后一个命令获取返回码。注意 OpenSSH 行为不同;它返回远程命令的退出状态作为它的退出状态。这将影响 dsh 的行为且可能需要使用 -c 标志

如果在 dsh 命令中没有发生错误,并且所有远程 shell 命令都是以退出代码 0 结束那么 dsh 的退出值就是 0。如果发生了内部错误,或者远程 shell 命令没有成功完成,则 dsh 退出值就大于 0。退出值对于每个不成功运行的连续实例加 1。

对于远程主机上命令的错误,未提供专门的错误恢复。应用程序和用户可以检查 dsh 命令的标准错误和标准输出的命令结果,并采取适当的操作。

dsh 命令一直等待,直到所有主机的每个命令的结果都出来,并且在读取更多输入命令前显示那些结果。仅当未在 dsh 命令行上指定 -s 标志时,此值才为真。

dsh 命令不与那些交互式命令一起工作,包括那些从标准输入读取的命令。

dsh 命令输出由远程发出命令的输出(标准错误和标准输出)组成。dsh 标准输出是远程 shell 命令的标准输出。dsh 标准错误是远程 shell 命令的标准错误。每一行前都以产生输出的节点主机名作为前缀。主机名后跟“:”和一行命令输出。

例如,命令发到 host1、host2 和 host3 的节点列表。当命令在每个主机上发出时,远程命令就会写下如下内容:

    对于 host1 标准输出:    h1out1
    h1out2
 
    对于 host2 标准输出:
    h2out1
    h2out2
 
    对于 host3 标准输出:
    h3out1
 
    对于 host2 标准错误:
    h3err1
    h3err2
 
    dsh 标准输出为
    host1: h1out1
    host1: h1out2
    host2: h2out1
    host2: h2out2
    host3: h3out1
 
    dsh 标准错误为
    host3: h3err1
    host3: h3err2

显示由节点分组的相同的输出结果的过滤器是另外提供的。请参阅 dshbak 命令。

如果正在节点关闭时检测到该节点(例如,远程 shell 命令发出非零返回码),则后续命令在 dsh 命令的这次调用时不发送到该节点,除非指定了 -c 标志

命令行开头的感叹号(!)使该命令直接传递到当前环境中的本地主机上。该命令不会被发送到节点列表。

信号 2(INT),信号 3(QUIT)和信号 15(TERM)都传播到远程命令。

信号 19(CONT),信号 17(STOP)和信号 18(TSTP)都是缺省值。这意味着 dsh 命令对这些信号作出正常的反应,但是这些信号对远程运行命令没有影响。其它信号由 dsh 捕获,并且对 dsh 命令具有缺省的影响。如果出现这些其它信号,终止(SIGTERM)所有当前子进程和通过传播它们远程运行的命令。

注:
DSH_REMOTE_CMD 环境变量可用于指定除了缺省 /usr/bin/rsh 之外的远程 shell。例如,符合 IETF(因特网工程任务组织)安全远程命令协议的安全远程命令。然而,要注意以下限制:
  1. dsh 本身并没有安全配置或责任。所有的安全性说明与用户启用的远程环境和用户实现的安全配置级别相关。例如,如果远程 shell 需要公用密钥或 Kerberos V5 凭证,则用户有责任实现这一要求。
  2. 为远程 shell 定义节点时,请使用全限定主机名。如果远程 shell 要求在其配置中的一组节点那么这些节点就必须通过全限定主机名进行定义。这允许 dsh 命令识别节点。还可以用一个别名定义节点。如果还提供了全限定主机名,别名是允许的。

可以通过下列方式指定希望使用的远程 shell。此处显示的顺序是优先顺序。

如果未指定以上任何一项,则 dsh 缺省为 /usr/bin/rsh

注意 dsh 缺省为 ksh 语法,除非使用 -S 标志

标志

-a
将所有定义到 CSM 的节点添加到节点列表。请注意您不能将 -a 标志-n-w 标志一起使用。
-c
指定不成功的命令应继续发送到远程节点。
-f fanout_value
指定一个散发值。缺省值是 64。它指示要发送的并发远程 shell 命令的最大数目。顺序运行可通过指示散发值 1 指定。如果未指定 -f 标志,则散发值从 DSH_FANOUT 环境变量获取。
-h
将命令的用法语句写到标准输出。
-i
通知用户某个节点没有反应,并提示用户是否应将该节点包含在节点列表中。
-l login_name
指定远程用户名,在此用户名下调用命令。如果未使用 -l,远程主机名就与本地用户名相同。请像处理远程 shell 命令一样使用此标志
--log pathname/filename
设置日志文件。日志项针对 dsh 命令的每个实例而添加。该标志覆盖 DSH_LOG 环境变量。
-L
指定不导出语言环境。
-m
以每个节点启动和完成消息的格式打印对每个节点的监视结果。
-n node_list | -
指定以逗号或空格分隔的要在其上运行此命令的节点主机名、IP 地址或节点范围的列表。以空格分隔的列表必须括在双引号内。有关指定节点范围的信息,请参阅 noderange 手册页。

如果指定了 -,则进入标准输入方式。dsh 通过 dsh host>".". 每次在一行内输入主机名。当完成时,按下 <Ctrl+d> 以退出标准输入方式并返回到 dsh 提示符。如果使用 -n -,则当从文件重定向时,无法从标准输入中读取命令。

注:
完全相同的主机名 在节点列表只包含一次。
-N nodegroups
解析一个或者多个 CSM 节点组(其间通过逗号分开),并将这些节点添加到节点列表或者工作集体。
-o "remote_shell_options"
转发远程 shell 的选项。引号中的信息被转发并包含在远程 shell 中。
-q
显示当前环境变量设置。例如,显示当前节点列表或者工作集体文件中的节点列表,以及 DSH_FANOUT 环境变量的值。
注:
标志必须在 dsh 命令行由它自己指定。它不能和其它任何 dsh 标志command 参数结合使用。
-r remote_shell_path
提供用来访问远程系统的远程 shell 的完路径。缺省的远程 shell 是 rsh
-R | --reports directory
设置 reports 目录用来进行报告。来自每个主机的所有输出保存到单独的输出和错误文件中,并生成报告。创建唯一的子目录来保存每个命令实例的输出文件和报告。子目录名称使用缺省的 unspecified 或使用 --reportName 标志提供的字符串来创建。名称后将添加整数扩展来创建唯一的目录名。此标志覆盖 DSH_REPORTS_DIRECTORY 环境变量。
-s
指定流方式中的输出。未对输出排序,但是性能可能改进且内存利用率有所减少。
-S csh | ksh
指定要在远程系统上使用的 shell 语法。
-t timeout
指定等待来自远程 shell 的响应的时间(以秒计)。覆盖 DSH_TIMEOUT 环境变量的值。
-v
在向节点列表加入节点时,先要进行验证。如果该节点没有响应,它就不包括在节点列表中。如果安装了 /opt/csm/bin/lsnode 命令,则可用它来检查节点的 ping 状态。如果未安装 lsnode 命令或返回的状态不是零,则可用命令 /bin/ping 来检查节点。/bin/ping 命令花几秒钟来检查没有响应的节点,而不是通常的远程 shell 超时所花的时间(分钟)。
-w node_list | -
等价于 -n 标志
-W | --noFileWriting
在与 --reports 标志一起使用或者设置了 DSH_REPORTS_DIRECTORY 时,对某个命令实例禁用输出文件写操作。报告仍然保持为已启用。通过 dshbak 命令来使用报告时需要此标志
-z
打印远程运行的最后一个命令的返回码。对每个节点,返回码附在每个节点输出的结尾。

参数

command
指定命令以调用节点列表。它被传递到远程 shell。这个命令是通过使用远程 shell 命令的语法指定的。

安全性

运行 Kerberos V5 远程命令之前,必须首先运行 kinit 命令来获取凭单授权凭单。

其它安全性注意事项和远程 shell 命令的注意事项相同。

退出状态

0
命令已经成功运行。
1
发生错误。

环境变量

DSH_FANOUT
设置并发远程 shell 命令的最大数目。这还可由 -f 标志设置。
DSH_LIST
指定一个包含组成节点列表的节点设置定义的文件。
DSH_LOG
当设置为日志文件的绝对路径和文件名时启用日志记录。此变量将被 --log--noLogging 标志覆盖。
DSH_PATH
设置用于远程节点的路径。如果没有设置 DSH_PATH,就使用远程 shell 的缺省路径。例如,DSH_PATH=$PATH设置远程节点上的路径与源节点上应用的路径完全相同。
DSH_REMOTE_CMD
指定要使用的远程 shell 可执行文件的路径,而不是缺省值。
DSH_REMOTE_OPTS
当命令被转发到远程节点时,要包含在远程命令中指定的选项。
DSH_REPORTS_DIRECTORY
当设置为 reports 目录路径时启用报告和输出文件写操作。--reports--noReporting 标志将覆盖此变量。
DSH_TIMEOUT
指定等待来自远程 shell 的响应的时间(以秒计)。这还可用 -t 标志设置。
WCOLL
等价于 DSH_LIST

示例

  1. 要在 dshhosts 文件中列出的每个主机中运行命令 ps,请输入:
    DSH_LIST=./dshhosts dsh ps
    
  2. 要按照 DSH_LIST 环境变量指定的那样列出当前节点列表文件,请输入:
    dsh -q
    
  3. 要设置三个节点的节点列表,并开始从标准输入读取命令,请输入:
    dsh -n otherhost1, otherhost2, otherhost3
    
  4. 要设置三个节点的当前节点列表,并在格式化输出时在那些节点上发出命令,请输入:
    dsh -n host1,host2,host3 -a cat /etc/passwd | dshbak
    
  5. 要将名为 otherhost 节点上的 remotefile 文件附加到名为 otherremotefile 的文件中(该文件位于 otherhost),请输入:
    dsh -n otherhost cat remotefile '>>' otherremotefile
    
  6. 要在当前工作集体的所有成员上按顺序运行一个命令文件并在文件中保存结果,其中要包括每个命令的集体和工作集体,请输入:
    dsh -if 1 <commands_file >results 2>&1
    
  7. 要在节点列表中运行 ps 命令,并且在本地过滤结果,请输入:
    dsh ps -ef | grep root
    
  8. 要运行 ps 命令,并在节点列表主机上过滤结果(这可以很大程度上提高性能),请输入:
    dsh 'ps -ef | grep root'
    或者
    dsh ps -ef "|" grep root
    
  9. 要从 host1 向本地系统 cat 一个文件,去掉前面的主机名来保存文件,请输入:
    dsh -n host1 cat /etc/passwd | cut -d: -f2- | cut -c2- >myetcpasswd
    
  10. 要在群集中的所有节点上运行带有远程 shell 上指定的 -D 标志needs_auth_program,请输入:
    dsh -a -o "-D" /usr/bin/needs_auth_program
    
  11. 要通过指定 -n- 以标准输入方式输入主机名称列表,然后请求来自指定节点的日期,请输入:
    dsh -n -
    完成主机名列表之后,按 <Ctrl+d> 返回到 dsh 提示符。在 dsh 提示符处指定:
    日期
    输出类似于以下内容:
    # dsh -n -
    host1
    host2
    host3
    dsh> date
    host1: Fri Mar 23 08:46:59 EST 2001
    host2: Fri Mar 23 08:46:59 EST 2001
    host3: Fri Mar 23 08:46:59 EST 2001
    dsh> exit
    #

位置

/opt/csm/bin/dsh

相关信息

dshbakrsh 命令。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]