Centos7集群部署JDK8 集群部署JDK#!/bin/bash# # 脚本名称: batch_install_jdk.sh# 功能描述: 批量在 32 台 CentOS 7 服务器上安装 JDK 1.8# # 配置区域 HOSTS(135.*.*.*135.*.*.*)SSH_USERrootSSH_PORT22SSH_PASSWORD# 密码写死在这里REMOTE_SCRIPT_PATH/tmp/install_jdk.shMAX_PARALLEL5# 颜色 RED\033[31mGREEN\033[32mYELLOW\033[33mBLUE\033[34mNC\033[0mTOTAL${#HOSTS[]}SUCCESS_COUNT0 FAIL_COUNT0 FAILED_HOSTS()# 生成目标机器安装脚本 generate_install_script(){cat/tmp/install_jdk.sh EOF#!/bin/bashset-e JDK_VERSIONjava-1.8.0-openjdk-develDOWNLOAD_DIR/opt/tools/javaLOG_FILE/var/log/jdk_install.loglog(){echo[$(date%Y-%m-%d %H:%M:%S)]$1|tee-a ${LOG_FILE}}log 开始安装 JDK # 创建下载目录log创建下载目录: ${DOWNLOAD_DIR}mkdir-p ${DOWNLOAD_DIR}if[!-d${DOWNLOAD_DIR}];then log错误: 目录创建失败exit1 fi log目录创建成功# 检查并安装 yum-utils (提供 yumdownloader 命令)if!command-v yumdownloader /dev/null;then log安装 yum-utils...yum install-y yum-utils ${LOG_FILE}21 fi# 安装 lrzsz (rz/sz 命令)log安装 lrzsz (rz/sz 命令)...yum install-y lrzsz ${LOG_FILE}21if[$?-eq0];then loglrzsz 安装成功elseloglrzsz 安装失败非关键错误继续执行fi# 安装解压工具log安装解压工具...yum install-y unzip tar gzip bzip2 xz ${LOG_FILE}21if[$?-eq0];then log解压工具安装成功 (unzip, tar, gzip, bzip2, xz)elselog解压工具安装失败非关键错误继续执行fi# 下载 JDKlog下载 JDK 到 ${DOWNLOAD_DIR}...yum install--downloadonly--downloaddir${DOWNLOAD_DIR}-y ${JDK_VERSION} ${LOG_FILE}21if[$?-eq0];then logJDK 下载完成elselogJDK 下载失败exit1 fi# 安装 JDKlog安装 JDK...cd ${DOWNLOAD_DIR}rpm-ivh*.rpm--nodeps 2/dev/null||rpm-ivh*.rpm ${LOG_FILE}21if[$?-eq0];then logJDK 安装完成elselogJDK 安装失败exit1 fi# 配置环境变量ACTUAL_JAVA_HOME$(dirname $(dirname $(readlink-f $(which java)))2/dev/null)if[-n${ACTUAL_JAVA_HOME}][-d${ACTUAL_JAVA_HOME}];then JAVA_HOME_PATH${ACTUAL_JAVA_HOME}else# 查找实际安装的 JDK 目录JAVA_HOME_PATH$(ls-d/usr/lib/jvm/java-1.8.0-openjdk-*2/dev/null|head-n 1)if[-z${JAVA_HOME_PATH}];then JAVA_HOME_PATH/usr/lib/jvm/java-1.8.0-openjdkfi ficat/etc/profile.d/java.sh EOFF export JAVA_HOME${JAVA_HOME_PATH}export PATH\$JAVA_HOME/bin:\$PATHexport CLASSPATH.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar EOFF source/etc/profile.d/java.sh log安装完成:$(java-version 21|head-n 1)logJAVA_HOME: ${JAVA_HOME_PATH}EOF chmodx/tmp/install_jdk.sh}# 使用 expect 实现 SSH 连接密码写死 ssh_exec(){local host$1local cmd$2expect-c set timeout 30 spawn ssh -o StrictHostKeyCheckingno -p ${SSH_PORT} ${SSH_USER}${host} \${cmd}\ expect { \password:\ { send \${SSH_PASSWORD}\r\; exp_continue } \Password:\ { send \${SSH_PASSWORD}\r\; exp_continue } eof } 2/dev/nullreturn$?}scp_upload(){local host$1local local_file$2local remote_file$3expect-c set timeout 30 spawn scp -o StrictHostKeyCheckingno -P ${SSH_PORT} ${local_file} ${SSH_USER}${host}:${remote_file} expect { \password:\ { send \${SSH_PASSWORD}\r\; exp_continue } \Password:\ { send \${SSH_PASSWORD}\r\; exp_continue } eof } 2/dev/nullreturn$?}# 单台安装 install_on_host(){local host$1local index$2echo-e${BLUE}[${index}/${TOTAL}] 处理: ${host}${NC}# 测试 SSH 连接if!ssh_exec ${host}echo ok/dev/null 21;thenecho-e${RED}✗ SSH 连接失败${NC}FAIL_COUNT$((FAIL_COUNT1))FAILED_HOSTS(${host} (SSH失败))return1 fi# 上传脚本if!scp_upload ${host}/tmp/install_jdk.sh ${REMOTE_SCRIPT_PATH};thenecho-e${RED}✗ 脚本上传失败${NC}FAIL_COUNT$((FAIL_COUNT1))FAILED_HOSTS(${host} (上传失败))return1 fi# 执行安装ifssh_exec ${host}bash ${REMOTE_SCRIPT_PATH};thenecho-e${GREEN}✓ ${host} 安装成功${NC}SUCCESS_COUNT$((SUCCESS_COUNT1))elseecho-e${RED}✗ ${host} 安装失败${NC}FAIL_COUNT$((FAIL_COUNT1))FAILED_HOSTS(${host} (执行失败))fi}# 主程序 main(){echo-e${GREEN}总机器数: ${TOTAL}${NC}echo-e${YELLOW}将使用系统默认 yum 源进行安装${NC}echo-e${YELLOW}使用密码: ${SSH_PASSWORD}${NC}read-p确认开始批量安装(y/n): -n 1-recho[[!$REPLY~ ^[Yy]$]]exit0# 检查 expect 是否安装if!command-v expect /dev/null;thenecho-e${RED}错误: 需要安装 expect${NC}echo安装命令: yum install -y expectexit1 fi generate_install_scriptfori in${!HOSTS[]};doinstall_on_host${HOSTS[$i]}$((i1))doneecho-e${GREEN}成功: ${SUCCESS_COUNT}, ${RED}失败: ${FAIL_COUNT}${NC}if[${FAIL_COUNT}-gt0];thenecho-e${RED}失败主机列表:${NC}forhost in${FAILED_HOSTS[]};doecho-e${RED} - ${host}${NC}done fi}main