
正文
BSA Network Shell系列-runcmd/runscript命令
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
runcmd和runscript
## 1 功能概述
runcmd/runscript:runcmd在一台或多台机器执行Network Shell命令(单个命令),而runscript执行的是脚本,二者使用方法一样。runcmd -e 参数后是要执行的命令,而runscript -e后面是要执行的Network Shell脚本
只是使用的话,看看下面的使用示例段就够了
## 2 使用示例
1 对远程主机执行命令:查看指定机器/etc路径下文件数
runcmd -h vm1 vm2 -d /etc -e ls -l | wc -l
2 为每台机器的输出加上标题,并在每行输出前都加上(hostname)
cloudexpress# runcmd -h lzx-clone1 10.200.108.92 -H "%h 网管机" -V -e whoamilzx-clone1 网管机(lzx-clone1) root(lzx-clone1) Exit Code 10.200.108.92 网管机(10.200.108.92) root(cloudexpress#
3 在机器上执行脚本,脚本可以位于任何一台机器上
a 脚本在某台远程机器上,这里是lzx-clone1
runscript -h lzx-clone1 10.200.108.101 -e //lzx-clone1/root/test/a.sh -脚本参数
b 脚本在执行命令的主机上
runscript -h lzx-clone1 10.200.108.101 -e /root/test/a.sh -脚本参数
4 并发执行,设置并发量为2
runcmd -h rome athens paris london -p 2 -e ifconfig
## 3 语法
runcmd [-v -n -p n] [-H header] [-NH] [-s | -c] [-d directory] [-f file] [-h host1 ... hostn] [-e command1 ...commandn]
runscript [-v -n -p n] [-H header] [-NH] [-s | -c] [-d directory] [-f file] [-h host1 ... hostn] [-e command1 ...commandn]
## 4 说明
runcmd和runscript允许在多台机器执行相同的命令。不同点是:runcmd执行的是Network Shell命令,runscript执行的是Network Shell脚本。
根据你正在执行的操作,你可能想知道你正在哪个主机处理。为此,为每个sub-command设置了NSH_RUNCMD_HOST变量,此外NSH_RUNCMD_DIR环境变量也会设置来提示当前Network Shell path。这两个变量可以通过下面的命令打印出来
cloudexpress# runcmd -h lzx-clone1 10.200.108.101 -e sh -c 'echo $NSH_RUNCMD_HOST $NSH_RUNCMD_DIR'==> lzx-clone1 <==lzx-clone1 //lzx-clone1/==> 10.200.108.101 <==10.200.108.101 //10.200.108.101/cloudexpress#
## 5 命令参数
-c 在每台机器执行Network Shell命令,如果运行的是runcmd则会隐式的调用这个参数。
-d dirname 当在主机上执行命令时,可以通过该参数指定每台主机的起始目录,指定后如果运行pwd命令的话,则路径就是该参数指定的路径。当然如果不使用该参数,你可以在命令中进行指定。
-e cmd 使用该参数指定要执行的命令。这个参数必须是最后一个参数。所有在-e参数后的参数都会被认为是执行命令的一部分。
-f file
该参数把要执行命令的主机放在file中,格式是一行一条记录。一条记录可以是一个主机名,也可是是一个UNC name(包含网络路径和主机名的完整名称,如//athens/bin)。
-h host
该参数指定要执行命令的所有主机。主机之间使用空格分开。在-h参数后,所有随后的内容都被认为是主机名,除非runcmd/runscript遇到另外一个参数(以'-'开头的参数)。和-f指定主机名的参数一样,-h后面的主机名也可以是主机名或者是UNC name。
-H header
runcmd/runscript在输出结果中会有一个简单的标题。使你很容易区分不同主机的输出。默认的标题格式为"==> %h <==",其中的"%h"会被命令行中指定的主机信息替换。-H header 可以用来自定义标题,例如:-H "%h 网管机",则如下命令:
runcmd -h lzx-clone1 -H "%h 网管机" -d /root/test -e pwd#命令结果lzx-clone1 网管机//lzx-clone1/root/test
-n 该参数会使输出的标题不带回车(carriage return).
-NH 该参数会禁止所有标题的输出,即使你指定了-H header参数。
-p n
以并发方式执行命令,n是并发量。这可以显著提高运行速度,但由于是并发执行,所有输出顺序会被打乱,所以如果需要清晰的输出结果,那就不能使用并发。并发的原理是通过调用多个subshell的方式实现的
-v 把在每个主机实际执行的命令打印出来(如果是runscript的话会打印脚本名,但不是输出脚本内容)
-V 在每行输出前面都加上"(hostname)",Hostname就是你输入的主机名.
-s 在每台机器执行Network Shell脚本,隐式说明执行的是runscript命令。
-? 输出帮助
## 6 返回值
如果命令或脚本正常执行,则Exit Code是0,如果命令执行结果Exit Code不是0的话,则Exit Code就是0
## 7 作者
runcmd和runscript命令的作者是Thomas Kraus







