今天搭建hadoop集群,安装完jdk之后发现手动一个个执行scp命令太慢了!!
于是打算写一个脚本可以直接把安装配置直接复制过去:
代码如下:
#!/bin/bash for i in {2..4} do scp -r root@hadoop1$i: echo "hadoop1$i"; done
然后执行命令:
scp 要复制的文件目录 目标文件目录
[root@hadoop12 script]# ./scp.sh /etc/profile /etc/profile
然后进行测试,执行命令
[root@hadoop12 script]# ssh hadoop11 "java;exit" bash: java: 未找到命令 [root@hadoop12 script]#
???难道执行失败了? 我直接来到hadoop11
啊这,我找了一下文章,终于发现了原因
总结来说,就是当通过ssh命令直接执行的时候,他并没有读取/etc/profile文件。而是/home下的.bashrc文件,但是我的home下什么文件都没有,
没有那就新建嘛,
新建一个.bashrc文件,写入我的配置
然后开心的执行source命令,再去尝试远程命令:
???难到哪里又错了,在这里我突然想到,如果我修改文件的时候需要刷新一下这个文件,那么有没有可能当他读取之后这个文件并没有进行刷新呢?毕竟export导入的是临时的,重新执行命令:
可以看到命令正常执行
下面提供一个远程执行命令:
#!/bin/bash for i in {1..4} do echo "login hadoop1$i"; echo "执行命令: ssh hadoop1$i '$*;exit'" ssh -t hadoop1$i "source /home/.bashrc;$*;exit"; done
就可以看到全部执行成功
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)