背景
集群里的机器需要执行某个命令时,没有脚本时,需要分别在每台机器执行命令,费时费力。
例如:在三台机器组成的机器,执行ls命令,需要分别在三台机器执行ls命令
# 在node2执行ls命令 [hadoop@node2 ~]$ ls bin installfile soft # 在node3执行ls命令 [hadoop@node3 ~]$ ls bin installfile soft # 在node4执行ls命令 [hadoop@node4 ~]$ ls bin installfile soft
思路
可以写一个Linux脚本来解决这个问题,思路如下:
思路: 1. 脚本名称:same.sh 2. 执行命令,例如: same.sh ls 3. 获取参数个数,小于1个参数报错 4. 编写脚本 1.获取当前机器的路径 2.所有机器切换到相同的目录(执行机器的当前路径) 3.执行参数命令,例如 ls
编写脚本
在~/bin
目录下,新建same.sh
脚本文件
[hadoop@node2 bin]$ nano same.sh
脚本内容如下:
#!/bin/bash
# 1.获取参数个数,小于1个参数报错
if [ $# -lt 1 ]
then
echo "No Args command Input..."
exit ;
fi
# 2.获取当前机器的路径
currDir=$pwd
# 3.ssh到每一台机器,切换到执行脚本机器的当前目录并执行相应命令,这里执行的命令只支持3个参数,可自己根据实际情况扩展,一般用于查看路径或文件内容
for host in node2 node3 node4
do
echo =============== $host ===============
ssh $host "cd $currDir;$1 $2 $3;"
done
添加执行权限
[hadoop@node2 bin]$ chmod u+x same.sh
测试脚本
该脚本一般用于查看文件或文件内容,
测试ls
[hadoop@node2 ~]$ same.sh ls =============== node2 =============== bin installfile soft =============== node3 =============== bin installfile soft =============== node4 =============== bin installfile soft
测试cat
[hadoop@node2 hadoop]$ same.sh cat workers =============== node2 =============== node2 node3 node4 =============== node3 =============== node2 node3 node4 =============== node4 =============== node2 node3 node4
完成!enjoy it!