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. 标准C语言(6)

    数组名称不可以代表任何存储区(数组名称不可以被赋值),数组名称可以代表数组里第一个存储区的地址 /* * 数组练习 * */ #include <stdio.h> #include < ...

  2. A Neural Probabilistic Language Model (2003)论文要点

    论文链接:http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf 解决n-gram语言模型(比如tri-gram以上)的组合爆炸问题,引入 ...

  3. SSH中直接运行php文件

    cd /home/afish/domains/afish.cnblogs.com/public_htmlphp locoy_im_folder.php php locoy_im.php

  4. java8学习之Stream陷阱剖析

    上一次[http://www.cnblogs.com/webor2006/p/8297603.html]在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于 ...

  5. 【TJOI 2019】唱、跳、rap和篮球

    题意 有 $a$ 个 $0$,$b$ 个 $1$,$c$ 个 $2$,$d$ 个 $3$,求有多少种长度为 $n$ 且不包含 $0123$ 这个子串的字符串个数. $n\le 1000,\space ...

  6. Java事务(转载)

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 1.JDBC事务 JDBC 事务是用 Connection 对象控制的.JDBC Conne ...

  7. P1879 [USACO06NOV]玉米田Corn Fields[轮廓线DP]

    状压暴力显然可做.但是数据出的再大一点就要稳T了.理论$O(n4^m)$,只不过实际跑不满. 考虑用轮廓线DP,设$f(i,j,S)$为处理到$(i,j)$时候(这格还不确定)的轮廓线为$S$的情况( ...

  8. 2017 CVTE Windows开发二面 3.8 (offer)

    中午1点左右,广州的号码打过来了,是CVTE的hr,然后问我下午4点半有没有时间,帮我约视频的二面. 当然有时间了啦,然后hr给我邮箱发了个链接,让我4点半登陆进去. 因为1面没问任何网络和操作系统的 ...

  9. 关于在react里面es6构建类的时候,一些开始的问题

    一般来说我们写react代码,个人习惯 这个里面没有constructor和super的,这样写也没啥问题.因为他会默认加上 但是有的时候有人会加上这两个 可以不写constructor,一旦写了co ...

  10. HTML标签与属性

    HTML中常用的一些标签和属性. 1.lang属性:搜索引擎      en:英文,  zh:中文 2.meta:元数据     charset属性:字符集编码方式 3.h1~h6:标题   一级标题 ...