Linux 集群脚本基础
程序员文章站
2024-02-25 17:27:03
...
前言
在最近安装虚拟机集群的时候,随意写了下虚拟机集群的脚本.
基础知识
- 分割字符串
shell 使用指定的分割符来分割字符串
#!/bin/bash
string="hello,shell,haha"
array=(${string//,/ })
for var in ${array[@]}
do
echo $var
done
-
SSH
免密登陆cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
-
远程操作
ssh [email protected]${i} "<操作1>;<操作2>"
例如:ssh [email protected] "cat /etc/profile;cat /ect/profile"
正文
集群安装JDK的脚本.
#!/bin/bash
# 需要安装的机器(也可以从配置文件读取)
cluster_nodes="192.168.31.60,192.168.31.61,192.168.31.62"
cluster_nodes=${cluster_nodes//,/ }
# 安装名字
jdk_tar_name="jdk-1.8.0_151.tar.gz";
# 安装目录
install_folder="/opt/apps/jdk"
# 循环所有的结点
for i in ${cluster_nodes}; do
# make dir
ssh [email protected]${i} "mkdir -p ${install_folder};"
#
# 分发
scp ${jdk_tar_name} [email protected]${i}:${install_folder}/
# 解压
ssh [email protected]${i} "cd ${install_folder};tar -zxvf jdk-1.8.0_151.tar.gz; mv jdk1.8.0_151 jdk-1.8;"
done
for i in ${cluster_nodes}; do
echo ${i};
ssh [email protected]${i} "if [[ ! $PATH =~ /opt/apps/jdk/jdk-1.8 ]]; then echo 'export JAVA_HOME=/opt/apps/jdk/jdk-1.8' >> /etc/profile; echo 'export PATH=\$JAVA_HOME/bin:\$PATH' >> /etc/profile; . /etc/profile; fi"
done
Reference
[1]. shell script 在if 的判断条件正则表达式=~中引号问题
[2]. 请教会linux shell脚本的=~是什么意思?
[3]. Shell中判断文件,目录是否存在
[4]. shell 使用指定的分割符来分割字符串