1.配置集群间免密登录

(1)配置host:vim /etc/hosts

(2)生成公钥 :ssh-keygen -t rsa -P ''

  这时会提示生成的公钥的存放地址,直接回车,公钥生成成功

(3)cat id_rsa.pub 将生成的公钥添加到需要登录的机器的authorized_keys文件里

然后直接ssh crawler01即可登录

2.一键启动脚本

 #!/bin/bash

 #程序包名称
ZIP_NAME="aikucun-distributed-spider-crawler.zip" zip_exist(){
if [ ! -f "$ZIP_NAME" ]
then
return
else
return
fi
} backup(){
echo "备份方法执行..."
cd ~/crawler
if zip_exist; then
mv $ZIP_NAME ~/jar_bak
echo "crawler程序包备份完成!"
else
echo "$ZIP_NAME 不存在,无法备份,请检查!"
fi
} check_single(){
if [ ! -f "bin/single.sh" ]
then
return
else
return
fi
} stop(){
echo "停止方法执行..."
if check_single; then
sh bin/single.sh stop
CURRENT_PATH=`cd "$(dirname "$")"; pwd`
echo "当前所在目录:$CURRENT_PATH"
rm -rf ~/crawler/*
echo "已清除旧程序"
else
echo "single脚本文件不存在,无法停止程序,请检查程序结构是否完整!"
exit 1
fi
} start(){
echo "开始方法执行..."
cd ~/jar_new
if zip_exist; then
mv $ZIP_NAME ~/crawler
cd ~/crawler
unzip -q $ZIP_NAME
echo "解压程序包完成!"
cd bin
dos2unix single.sh
echo "格式转换完成!"
sh single.sh start
else
echo "$ZIP_NAME 不存在,程序无法发布,请检查!"
exit 1
fi
}
backup
stop
star

3.上传一键启动脚本upload.sh

 #!/bin/bash

 #取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd` crawler_list="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
"
for i in $crawler_list
do
echo "正在上传一键启动脚本至$i"
scp $BASE_PATH/publish_crawler.sh $i:~
echo "$i机器上传完成"
done

4.一键发布脚本

 #!/bin/bash

 #取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd`
SHELL_NAME="publish_crawler.sh" crawler_list="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
"
for i in $crawler_list
do
echo "正在上传程序包至$i"
scp $BASE_PATH/crawler/aikucun-distributed-spider-crawler.zip $i:~/jar_new
echo "登录并执行一键启动脚本"
ssh $i "sh $SHELL_NAME"
done

5.通用脚本优化

(1)上传一键启动脚本到相应的服务器的脚本

(2)一键启动脚本

(3)一键发布脚本

 #!/bin/bash

 #取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd` SERVER_LIST="" upload(){
echo "上传服务器列表:$SERVER_LIST"
for i in $SERVER_LIST
do
echo "正在上传一键启动脚本至$i"
scp $BASE_PATH/publish.sh $i:~
echo "$i机器上传完成"
done
} case "$1" in crawler)
SERVER_LIST="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
"
upload
;;
transport)
SERVER_LIST="
transport01
transport02
transport03
transport04
transport05
transport06
"
upload
;;
storage)
echo "尚未集成,敬请期待!"
;;
*)
echo "available operations: [crawler|transport|storage]"
exit
;;
esac
 #!/bin/bash

 #程序包名称
APP_NAME=$
ZIP_NAME="aikucun-distributed-spider-$APP_NAME.zip"
APP_PATH=$APP_NAME zip_exist(){
if [ ! -f "$ZIP_NAME" ]
then
return
else
return
fi
} backup(){
echo "备份方法执行..."
cd ~/$APP_PATH
if zip_exist; then
mv $ZIP_NAME ~/jar_bak
echo "$APP_NAME 程序包备份完成!"
else
echo "$ZIP_NAME 不存在,无法备份,请检查!"
fi
} check_single(){
if [ ! -f "bin/single.sh" ]
then
return
else
return
fi
} stop(){
echo "停止方法执行..."
if check_single; then
sh bin/single.sh stop
CURRENT_PATH=`cd "$(dirname "$")"; pwd`
echo "当前所在目录:$CURRENT_PATH"
rm -rf ~/$APP_PATH/*
echo "已清除旧程序"
else
echo "single脚本文件不存在,无法停止程序,请检查程序结构是否完整!"
exit 1
fi
} start(){
echo "开始方法执行..."
cd ~/jar_new
if zip_exist; then
mv $ZIP_NAME ~/$APP_PATH
cd ~/$APP_PATH
unzip -q $ZIP_NAME
echo "解压程序包完成!"
cd bin
dos2unix single.sh
echo "格式转换完成!"
sh single.sh start
else
echo "$ZIP_NAME 不存在,程序无法发布,请检查!"
exit 1
fi
} case "$1" in crawler|transport|storage)
backup
stop
start
;;
*)
echo "available operations: [crawler|transport|storage]"
exit 1
;;
esac
 #!/bin/bash

 #取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd`
SHELL_NAME="publish.sh"
APP_NAME=$ SERVER_LIST="init" execute(){
echo "服务器列表:$SERVER_LIST"
echo "应用名称: $APP_NAME"
for i in $SERVER_LIST
do
echo "正在上传 $APP_NAME 程序包至$i"
scp $BASE_PATH/$APP_NAME/aikucun-distributed-spider-$APP_NAME.zip $i:~/jar_new
echo "登录并执行一键启动脚本"
ssh $i "sh $SHELL_NAME $APP_NAME"
done
} case "$1" in crawler)
SERVER_LIST="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
"
execute
;;
transport)
SERVER_LIST="
transport01
transport02
transport03
transport04
transport05
transport06
"
execute
;;
storage)
echo "尚未集成,敬请期待!"
;;
*)
echo "available operations: [crawler|transport|storage]"
exit
;;
esac

6.在原来的基础上进一步优化,增加一键停止功能

(1)上传发布脚本到集群各个服务器的脚本

#!/bin/bash

#取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd` SERVER_LIST="" upload(){
echo "上传服务器列表:$SERVER_LIST"
for i in $SERVER_LIST
do
echo "正在上传一键启动脚本至$i"
scp $BASE_PATH/publish.sh $i:~
echo "$i机器上传完成"
done
} case "$1" in crawler)
SERVER_LIST="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
crawler16
crawler17
"
upload
;;
transport)
SERVER_LIST="
transport01
transport02
transport03
transport04
transport05
transport06
transport07
transport08
"
upload
;;
storage)
SERVER_LIST="
storage01
storage02
storage03
storage04
"
upload
;;
controller)
SERVER_LIST="
controller01
controller02
controller03
"
upload
;;
*)
echo "available operations: [crawler|transport|storage|controller]"
exit
;;
esac

(2)发布脚本

#!/bin/bash

#程序包名称
APP_NAME=$
ZIP_NAME="aikucun-distributed-spider-$APP_NAME.zip"
APP_PATH=$APP_NAME zip_exist(){
if [ ! -f "$ZIP_NAME" ]
then
return
else
return
fi
} backup(){
echo "备份方法执行..."
cd ~/$APP_PATH
if zip_exist; then
mv $ZIP_NAME ~/jar_bak
echo "$APP_NAME 程序包备份完成!"
else
echo "$ZIP_NAME 不存在,无法备份,请检查!"
fi
} check_single(){
if [ ! -f "bin/single.sh" ]
then
return
else
return
fi
} stop(){
echo "停止方法执行..."
cd ~/$APP_PATH
if check_single; then
sh bin/single.sh stop
CURRENT_PATH=`cd "$(dirname "$")"; pwd`
echo "当前所在目录:$CURRENT_PATH"
else
echo "single脚本文件不存在,无法停止程序,请检查程序结构是否完整!"
exit
fi
} start(){
echo "开始方法执行..."
rm -rf ~/$APP_PATH/*
echo "已清除旧程序"
cd ~/jar_new
if zip_exist; then
mv $ZIP_NAME ~/$APP_PATH
cd ~/$APP_PATH
unzip -q $ZIP_NAME
echo "解压程序包完成!"
cd bin
dos2unix single.sh
echo "格式转换完成!"
sh single.sh start
else
echo "$ZIP_NAME 不存在,程序无法发布,请检查!"
exit 1
fi
} case "$1" in crawler|transport|storage|controller)
if [ "$2" == 'stop' ]; then
stop
else
backup
stop
start
fi
;;
*)
echo "available operations: [crawler|transport|storage|controller]"
exit 1
;;
esac

(3)一键发布执行脚本

#!/bin/bash

#取当前目录
BASE_PATH=`cd "$(dirname "$")"; pwd`
SHELL_NAME="publish.sh"
APP_NAME=$
ACT=$ SERVER_LIST="init" execute(){
echo "服务器列表:$SERVER_LIST"
echo "应用名称: $APP_NAME"
for i in $SERVER_LIST
do
echo "正在上传 $APP_NAME 程序包至$i"
scp $BASE_PATH/$APP_NAME/aikucun-distributed-spider-$APP_NAME.zip $i:~/jar_new
echo "登录并执行一键 $ACT 执行脚本"
ssh $i "sh $SHELL_NAME $APP_NAME $ACT"
done
} case "$1" in crawler)
SERVER_LIST="
crawler02
crawler03
crawler04
crawler05
crawler06
crawler07
crawler08
crawler09
crawler10
crawler11
crawler12
crawler13
crawler14
crawler15
crawler16
crawler17
"
execute
;;
transport)
SERVER_LIST="
transport01
transport02
transport03
transport04
transport05
transport06
transport07
transport08
"
execute
;;
storage)
SERVER_LIST="
storage01
storage02
storage03
storage04
"
execute
;;
controller)
SERVER_LIST="
controller01
controller02
"
execute
;;
*)
echo "available operations: [crawler|transport|storage|controller]"
exit
;;
esac

一键发布shell脚本的更多相关文章

  1. CentOS 6一键系统优化 Shell 脚本

    CentOS 6一键系统优化 Shell 脚本 脚本的内容如下: #!/bin/bash#author suzezhi#this script is only for CentOS 6#check t ...

  2. centos下的redis一键安装shell脚本

    #!/bin/bash yum install cpp binutils glibc-kernheaders glibc-common glibc-devel gcc make wget #安装依赖库 ...

  3. 该死的端口占用!教你用 Shell 脚本一键干掉它!

    1. 前言 大家好,我是安果! 在 Web 开发中,经常会遇到「端口被占用」的场景 常规解决方案是: 使用 lsof -i 命令查询占用端口的进程 PID 利用 kill -9 PID 干掉目标进程 ...

  4. 分享两个实用的shell脚本

    各位,早上好啊~ 发现许久没有分享过技术文章了,今天分享两个部署项目时候比较实用的shell脚本 一键部署shell脚本 由于个人部署,会习惯把jar放到lib目录下面,如果你没有这个习惯,可以适当做 ...

  5. mac链接linux终端,shell脚本发布代码

    项目的业务需求:从mac端直接连上linux服务终端,并发布相关的代码 一.使用ssh链接上linux服务端 1.cd ~/.ssh 2.vi config,按照下面的内容配置config文件,然后: ...

  6. 使用 shell 脚本实现 LANMP 一键安装

    使用 shell 脚本来实现 LANMP 系统的一键安装.使用的操作系统是 CentOS 6 ,不区分 32 位和 64 位,要求机器可以连通互联网.支持 LAMP 和 LNMP ,MySQL 支持 ...

  7. 使用expect脚本语言写一键发布服务(代码发布、所有服务重启)

    互联网服务有很多台服务,但是在上线的时候需要将这些服务版本都更新与个个都重启,下面的脚本语言,就是一键发布服务~ 1.在/home/weihu/deploy/ 目录下建下publish .publis ...

  8. Centos 6.4上面用Shell脚本一键安装vsftpd

    Centos 6.4上面用Shell脚本一键安装vsftpd install.sh #!/bin/bash if [ `uname -m` == "x86_64" ];then m ...

  9. Centos 6.4上面用Shell脚本一键安装mysql 5.6.15

    Centos 6.4上面用Shell脚本一键安装mysql 5.6.15  #!/bin/bash if [ `uname -m` == "x86_64" ];then machi ...

随机推荐

  1. Type Trait 和 Type Utility

    所谓Type trait,提供了一种用来处理type 属性的办法,它是个template,可在编译期根据一个或多个template实参(通常也是type)产出一个type或者value. templa ...

  2. Nginx实用整理

    1. nginx 简述 1.1Nginx是轻量级高并发HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:Nginx可以作为一个HTTP服务器进行网站的发布处理,另外N ...

  3. 11jsp

    1.JSP 1. 指令 作用:用于配置JSP页面,导入资源文件 格式:             <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 分类:        ...

  4. D-query SPOJ - DQUERY (莫队算法裸题)

    Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) ...

  5. jvm中的新生代Eden和survivor区

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  6. 关于sparksql

    1.读取json文件,并且进行查询等操作 所使用的jar包为 json文件内容 { "id":1 ,"name":" Ella"," ...

  7. chattr&lsattr

    chattr 和 lsattr 用来查看和改变文件属性,chmod 只是用来改变文件的读写与可执行权限,而文件的属性控制是由 chattr 来完成 常用用法: chattr +i /home/test ...

  8. JAVA基础编程之打印99乘法表

    需求:打印9*9乘法表 技术考核: 1.for嵌套循环 代码: // 打印99乘法表 public static void print99Table() { System.out.println(&q ...

  9. chromedriver.exe,自动化web, 安装谷歌驱动,以及可能遇到的坑

    1.下载谷歌驱动:chromedriver.exe http://chromedriver.storage.googleapis.com/index.html (下载驱动的链接) 2.把下载的chro ...

  10. C# socket异步 服务端

    转自:  http://blog.csdn.net/qq_20282263/article/details/54310737 private Dictionary<string, Session ...