Shell 脚本
1、远程拷贝脚本
- 注:SERS="master01 master02 slave01 slave02"为集群节点
- 使用时传入两个参数:1为本机要传入的目录,2位要拷贝到的地方的目录
#!/bin/bash
if [ $# -lt 2 ]
then
echo "please input 2 agrs : source and dest path"
fi
SERS="master01 master02 slave01 slave02"
echo "start to scp distribute : $1 ..."
for i in $SERS
do
if [ $i != $HOSTNAME ]
then
echo -n "---- $i ---- "
if [ -f $1 ]
then
CMD=`scp $1 root@$i:/$2`
elif [ -d $1 ]
then
CMD=`scp -r $1 root@$i:/$2`
fi
echo ok
fi
done
2、远程循环执行命令(比如JPS)
- 注:SERS="master01 master02 slave01 slave02"为集群节点
- 使用时传入一个参数 jps,如提示commond not found,需要在jps前加上jdk/bin目录的路径:@JAVA_HOME/bin/jps
#!/bin/bash
if [ $# -ne 1 ]
then
echo "please input one sys cmd (like 'jps' etc)"
exit 0
fi
SERS="master01 master02 slave01 slave02"
for i in $SERS
do
echo "---------------[ $1 ] $i-------------------"
CMD=`ssh root@$i "$1"`
echo $CMD
done
3、环境变量转移到/etc/profile.d/目录下,方便远程发送
- 原理:/etc/profile在底边的for循环,本身就会执行/etc/profile.d/目录下的所有.sh文件,因此转移出去没有任何影响!
- cd /etc/profile.d/
- vi my.sh,复制以下内容(原/etc/profile内的环境变量),保存即可
- 不需要对my.sh增加x权限
- 以下为转移的内容案例
export JAVA_HOME=/opt/software/jdk180
export HADOOP_HOME=/opt/software/hadoop/hadoop260
export HIVE_HOME=/opt/software/hadoop/hive110
export ZK_HOME=/opt/software/hadoop/zookeeper345
export HBASE_HOME=/opt/software/hadoop/hbase120
export SQOOP_HOME=/opt/software/hadoop/sqoop146
export PHOENIX_HOME=/opt/software/hadoop/phoenix414
export SPARK_HOME=/opt/software/hadoop/spark244
export PATH=$HIVE_HOME/bin:$HIVE_HOME/lib:$PHOENIX_HOME/bin:$SQOOP_HOME/bin:$HBASE_HOME/bin:$ZK_HOME/bin:$ZK_HOME/sbin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASS_PATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export LOGDIR=$SQOOP_HOME/mylog/