批量在多台Linux机器上安装OpenJDK

2024-08-28 20:52

本文主要是介绍批量在多台Linux机器上安装OpenJDK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一次我们实践了手动安装OpenJDK的过程,并且完成了用脚本一键安装的试验。但是本质上,我还是每台机器上单独进行操作。那这就产生了一个问题,如果我需要一次性在多台机器上部署安装,需要怎么操作呢。

问题分析

假设我的目的是在一台机器上运行一个指令,或者说运行一个脚本,就可以在指定的多台机器上批量安装OpenJDK,那我大概需要做到如下几件事情。

  1. 分别将安装文件和安装脚本发送到各机器的指定路径
  2. 指定各机器运行指定脚本

准备安装文件和脚本

首先我们来解决第一个问题,将安装文件和脚本文件复制到各机器上。

在机器之间拷贝文件,很自然的我们想到了scp命令,比如

scp /opt/filename root@192.168.32.22:/opt/

但是这样需要在各个主机之间建立信任关系,我们使用如下脚本建立信任关系

#!/bin/bash
#在指定目标范围ip的主机间建立信任关系# 判断公钥是否已存在,不存在就生成
echo "开始运行>>>"
if [ ! -f ~/.ssh/id_rsa ] ; thenecho "生成公钥>>>"ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
elseecho "公钥已存在,继续运行"
ficat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
pw="abc@1234"# 目标主机 IP 范围
network="192.168.32"
start_ip=22
end_ip=23# 用expect模拟输入,使用ssh-copy-id命令将公钥复制到各目标主机
for ip in $(seq ${start_ip} ${end_ip})
dotarget_ip=${network}.${ip}echo "正在和目标主机${target_ip}建立信任关系>>>"sleep 2my_command="ssh-copy-id -i /root/.ssh/id_rsa.pub root@${target_ip}"expect -c "spawn ${my_command};set timeout 60expect {\"password:\"             {send \"${pw}\r\";  exp_continue}\"connecting (yes/no)?\"  {send \"yes\r\";    exp_continue}}"echo "目标主机${target_ip}间的信任关系已建立>>>"
done

建立信任关系后,用scp命令向目标主机复制文件就不需要输入密码了。

那么下一步我们就写一个shell脚本,它的作用就是把安装文件和脚本发送到目标主机。

#!/bin/bash
#在指定目标范围ip的主机间复制文件# 目标主机 IP 范围
network="192.168.32"
start_ip=22
end_ip=23# 获取当前日期和时间
current_date=$(date +%Y%m%d)
current_time=$(date +%H%M%S)# 日志文件名
log_file="${current_date}_${current_time}.log"# 发送文件并记录结果到日志文件
function send_file() {local target_ip=$1local file_path=$2scp "$file_path" root@"$target_ip":/opt/ &>> "$log_file"# 检查发送结果并记录到日志文件if [ $? -eq 0 ]; thenecho "${file_path}文件发送成功到${target_ip}"echo "${file_path}文件发送成功到${target_ip}" >> "$log_file"elseecho "${file_path}文件发送失败到${target_ip}"echo "${file_path}文件发送失败到${target_ip}" >> "$log_file"fi
}for ip in $(seq ${start_ip} ${end_ip})
dotarget_ip=${network}.${ip}echo "正在复制文件到 ${target_ip}..."send_file "$target_ip" "/opt/install_jdk.sh"send_file "$target_ip" "/opt/openjdk-22.0.2_linux-x64_bin.tar.gz"
done
echo "文件复制完成。请查看日志文件 ${log_file} 获取详细结果。"

指定各机器运行指定脚本

#!/bin/bash# 目标主机 IP 范围
network="192.168.32"
start_ip=22
end_ip=23# 运行脚本并记录结果到日志文件
function run_script() {local target_ip=$1local script_path=$2ssh root@"$target_ip" "$script_path" &>> "$log_file"# 检查运行结果并记录到日志文件if [ $? -eq 0 ]; thenecho "${script_path}脚本在${target_ip}上成功运行"echo "${script_path}脚本在${target_ip}上成功运行" >> "$log_file"elseecho "${script_path}脚本在${target_ip}上运行失败"echo "${script_path}脚本在${target_ip}上运行失败" >> "$log_file"fi
}# 获取当前日期和时间
current_date=$(date +%Y%m%d)
current_time=$(date +%H%M%S)# 日志文件名
log_file="${current_date}_${current_time}.log"for ip in $(seq ${start_ip} ${end_ip})
dotarget_ip=${network}.${ip}echo "正在运行脚本在 ${target_ip}..."run_script "$target_ip" "/opt/install_jdk.sh"
done
echo "脚本运行完成。请查看日志文件 ${log_file} 获取详细结果。"

最终执行

我们假设信任关系已建立,那么运行以下脚本即可。

#!/bin/bash# 最终脚本,批量安装
# 下载文件
wget -P "/opt/" https://download.java.net/java/GA/jdk22.0.2/c9ecb94cd31b495da20a27d4581645e8/9/GPL/openjdk-22.0.2_linux-x64_bin.tar.gz
# 发送到各主机
source a.sh
# 执行安装
source b.sh

大功告成!

[root@node21 ~]# source insatall.sh 
--2024-08-27 17:17:37--  https://download.java.net/java/GA/jdk22.0.2/c9ecb94cd31b495da20a27d4581645e8/9/GPL/openjdk-22.0.2_linux-x64_bin.tar.gz
Resolving download.java.net (download.java.net)... 23.45.136.96
Connecting to download.java.net (download.java.net)|23.45.136.96|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 201996264 (193M) [application/x-gzip]
Saving to: ‘/opt/openjdk-22.0.2_linux-x64_bin.tar.gz’100%[============================================================================================================================>] 201,996,264 4.17MB/s   in 49s    2024-08-27 17:18:27 (3.91 MB/s) - ‘/opt/openjdk-22.0.2_linux-x64_bin.tar.gz’ saved [201996264/201996264]正在复制文件到 192.168.32.22...
/opt/install_jdk.sh文件发送成功到192.168.32.22
/opt/openjdk-22.0.2_linux-x64_bin.tar.gz文件发送成功到192.168.32.22
正在复制文件到 192.168.32.23...
/opt/install_jdk.sh文件发送成功到192.168.32.23
/opt/openjdk-22.0.2_linux-x64_bin.tar.gz文件发送成功到192.168.32.23
文件复制完成。请查看日志文件 20240827_171827.log 获取详细结果。
正在运行脚本在 192.168.32.22...
/opt/install_jdk.sh脚本在192.168.32.22上成功运行
正在运行脚本在 192.168.32.23...
/opt/install_jdk.sh脚本在192.168.32.23上成功运行
脚本运行完成。请查看日志文件 20240827_171930.log 获取详细结果。

这篇关于批量在多台Linux机器上安装OpenJDK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115861

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指