03/ shell编程综合练习

自动化软件部署脚本

3.1 需求

1、需求描述

公司内有一个N个节点的集群,需要统一安装一些软件(jdk)

需要开发一个脚本,实现对集群中的N台节点批量自动下载、安装jdk

2、思路

1/ 编写一个启动脚本,用来发送一个软件安装脚本到每一台机器

2/ 然后启动每台机器上的软件安装脚本来执行软件下载和安装

3、expect的使用

痛点:使用scp命令远程拷贝文件时,会有人机交互的过程,如何让脚本完成人机交互?

妙药: expect

用法示例:

先观察  ssh localhost 的过程

再看expect的功能

#!/bin/bash/expect

## exp_test.sh

set timeout -1;

spawn ssh localhost;

expect {

"(yes/no)" {send "yes\r";exp_continue;}

"password:" {send "hadoop\r";exp_continue;}

eof        {exit 0;}

}

执行:  expect -f exp_test.sh

3.2 准备内网软件下载服务器

选择一台服务器(比如mini)作为软件源服务器

1、安装httpd   (如果已有,可跳过)

yum install -y httpd

service httpd start

chkconfig --level 35 httpd on

2、制作局域网yum源

1/ 挂载centos安装光盘到/mnt/cdrom    (如果已有,可跳过)

mkdir /mnt/cdrom

mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom

2/ 将本地yum库放入httpd服务器

ln -s /mnt/cdrom /var/www/html/centos

检查点:用浏览器访问  http://mini/centos  看能否看到光盘内容

3、编写repo配置

vi /etc/yum.repos.d/centos.repo

[c6-httpd]

name=CentOS-httpd

baseurl=http://192.168.33.3/centos

gpgcheck=0

enabled=1

4、分发repo配置到局域网

从母鸡shizhan01上把centos.repo拷贝给所有需要自动安装软件的服务器(仔鸡mini1/mini2)

cd /etc/yum.repos.d/

scp /etc/yum.repos.d/innet.repo mini1:$PWD

scp /etc/yum.repos.d/innet.repo mini2:$PWD

5、准备一个jdk安装包放在内网web服务器上

3.3 脚本开发

1、启动脚本

vi boot.sh

#!/bin/bash

SERVERS="mini1 mini2"

PASSWORD=hadoop

BASE_SERVER=192.168.33.11

##  实现免密登陆配置的函数

auto_ssh_copy_id() {

expect -c "set timeout -1;

spawn ssh-copy-id $1;

expect {

*(yes/no)* {send -- yes\r;exp_continue;}

*assword:* {send -- $2\r;exp_continue;}

eof        {exit 0;}

}";

}

ssh_copy_id_to_all() {

for SERVER in $SERVERS

do

auto_ssh_copy_id $SERVER $PASSWORD

done

}

## 调用免密登陆配置函数,实现母鸡到各仔鸡的免密登陆配置

ssh_copy_id_to_all

## 完成分发install.sh到各仔鸡的操作

## 并让仔鸡启动install.sh

for SERVER in $SERVERS

do

scp install.sh root@$SERVER:/root

ssh root@$SERVER /root/install.sh

done

2、安装执行脚本

vi install.sh

#!/bin/bash

BASE_SERVER=192.168.33.11

##  为本机安装wget命令

yum install -y wget

## 使用wget从母鸡的web服务器上下载jdk压缩包

wget $BASE_SERVER/soft/jdk-7u67-linux-x64.gz

## 将下载的压缩包解压

tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local

## 修改profile配置文件

cat >> /etc/profile << EOF

export JAVA_HOME=/usr/local/jdk1.7.0_67

export PATH=\$PATH:\$JAVA_HOME/bin

EOF

3、启动脚本

只要在baseServer即mini上启动boot.sh即可

大数据学习——shell编程的更多相关文章

  1. 大数据学习day20-----spark03-----RDD编程实战案例(1 计算订单分类成交金额,2 将订单信息关联分类信息,并将这些数据存入Hbase中,3 使用Spark读取日志文件,根据Ip地址,查询地址对应的位置信息

    1 RDD编程实战案例一 数据样例 字段说明: 其中cid中1代表手机,2代表家具,3代表服装 1.1 计算订单分类成交金额 需求:在给定的订单数据,根据订单的分类ID进行聚合,然后管理订单分类名称, ...

  2. 大数据学习——actor编程

    1 概念 Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制,Scala是运用消息(message)的发送.接收来实现多线程的.使用Scala能够更容易地实现多线程应用的开 ...

  3. 大数据学习笔记——Hadoop编程实战之HDFS

    HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...

  4. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  5. 大数据学习路线,来qun里分享干货,

    一.Linux lucene: 全文检索引擎的架构 solr: 基于lucene的全文搜索服务器,实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面. 推荐一个大数据学习群 ...

  6. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  7. 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试

    前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...

  8. 大数据学习:storm流式计算

    Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: 1.Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 2.由于Storm的处理组件都是分布式的, ...

  9. 大数据学习(一) | 初识 Hadoop

    作者: seriouszyx 首发地址:https://seriouszyx.top/ 代码均可在 Github 上找到(求Star) 最近想要了解一些前沿技术,不能一门心思眼中只有 web,因为我目 ...

随机推荐

  1. NYOJ #21 三个水杯(bfs)

    描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标 ...

  2. pyinstaller 打包.exe文件记录遇到的问题

    用pyinstaller打包py2.7的程序有时会出现不匹配的错误,在python的idle下运行没有问题,打包之后却会报一些错误,所以打包的话还是尽量用py3.5版本,而且用 -F 将程序打包成一个 ...

  3. hdu 1979 DFS + 字典树剪枝

    http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...

  4. 多线程wait和notify实现1212

    package threadT; public class ThreadMain { public static void main(String args[]) { final Object obj ...

  5. html/css实现聊天布局

    效果图 项目结构 html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" / ...

  6. BBS项目总结

    数据库(Oracle): BBSUserid:主键username:用户名password:密码pic:头像 blobpagenum:每个人分页喜好数量,每页显示多少行 Article :ID:主键, ...

  7. 编程挑战JavaScript进阶篇(慕课网题目)

    编程挑战 现在利用之前我们学过的JavaScript知识,实现选项卡切换的效果. 效果图: 文字素材: 房产: 275万购昌平邻铁三居 总价20万买一居    200万内购五环三居 140万安家东三环 ...

  8. Android 使用GridView+仿微信图片上传功能(附源代码)

    由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...

  9. 微信小程序组件解读和分析:一、view(视图容器 )

    view组件说明:    视图容器    跟HTML代码中的DIV一样,可以包裹其他的组件,也可以被包裹在其他的组件内部.用起来比较自由随意,没有固定的结构. view组件的用法: 示例项目的wxml ...

  10. 在CNN网络中roi从原图映射到feature map中的计算方法

    在使用fast rcnn以及faster rcnn做检测任务的时候,涉及到从图像的roi区域到feature map中roi的映射,然后再进行roi_pooling之类的操作.比如图像的大小是(600 ...