Shell一键发布程序

为实现一键发布,最好是可以免密码登陆服务器,通过创建RSA密钥对,将公钥写入目标服务器来实现免密登陆,参考这里

一键发布

发布脚本 deploy.sh

#!/bin/sh

currentDir=`cd ..;pwd`
localJarDir="${currentDir}/target/"

# package send/receive/mail service
packageApp(){
    cd ${currentDir}/send-service/
    mvn package

    cd ${currentDir}/receive-service/
    mvn package

    cd ${currentDir}/mail-service/
    mvn package 

    # copy to target directory
    if [ ! -d "$localJarDir" ]; then
        mkdir -p ${localJarDir}
    fi

    echo "copy jar to $localJarDir"
    cp ${currentDir}/send-service/target/*.jar ${localJarDir}
    cp ${currentDir}/receive-service/target/*.jar ${localJarDir}
    cp ${currentDir}/mail-service/target/*.jar ${localJarDir}
}

# upload & restart application
appPath="/app/jar/"
appBackPath="/app/jar/backup/"
user="hello"
aliEcs1="1.1.1.134"
aliEcs2="1.1.1.135"

# shutdown application
shutdownApp(){
ssh -tt ${user}@$1<<EOF
    cd ${appPath}
    sh shutdown.sh
    exit
EOF
}

# start application
startApp(){
ssh -tt ${user}@$1<<EOF
    cd ${appPath}
    sh startup.sh
    exit
EOF
}

# backup application
# ssh -tt ${user}@$1<<EOF
#   cd $appPath
#   jarFileList=`ls | grep jar | awk '{print $1}'`
#   for file in $jarFileList; do
#       if [ -f $file ]; then
#           cp $file $appBackPath
#       fi
#   done
#   exit
# EOF
# ssh $user@$1 'for i in /app/jar/*.jar ; do echo $i; done'
# fileDate=`date -r $file '+%Y-%m-%d' | awk '{print $1}'`
# cp $file "$appBackPath/$file.$fileDate"
backupApp(){
ssh -tt ${user}@$1<<EOF
cd ${appPath}
sh backup.sh
exit
EOF
}

# upload to server
# ftp or sftp
uploadFile(){
sftp ${user}@$1<<EOF
  put -r ${localJarDir}*.jar ${appPath}
  quit
EOF
}

# deployApp $aliEcs1
deployApp(){
    shutdownApp $1
    backupApp $1
    uploadFile $1
    startApp $1
}

echo "********************************************** Package app application **********************************************"
packageApp

echo "********************************************** Deploy app to AliECS 1 **********************************************"
deployApp ${aliEcs1}

echo "********************************************** Deploy app to AliECS 2 **********************************************"
deployApp ${aliEcs2}

启停脚本

startup.sh

#!/bin/sh

app_version="0.1.0"
profile_active="prod"
#profile_active="test"

java_cmd="nohup java -jar -Duser.language=en -Dspring.profiles.active=${profile_active}"

echo "Start send service."
${java_cmd} send-service-${app_version}.jar > send-service.log &
sleep 2s

echo "Start receive service."
${java_cmd} receive-service-${app_version}.jar > receive-service.log &
sleep 3s

echo "Start mail service."
${java_cmd} mail-service-${app_version}.jar > mail-service.log &

shutdown.sh

#!/bin/sh

send_service_id=`ps -ef|grep send-service |grep -v grep | gawk '{print $2}'`
receive_service_id=`ps -ef|grep receive-service |grep -v grep | gawk '{print $2}'`
mail_service_id=`ps -ef|grep mail-service |grep -v grep | gawk '{print $2}'`

echo "Start to shutdown send service."
kill -9 ${send_service_id}

echo "Start to shutdown receive service."
kill -9 ${receive_service_id}

echo "Start to shutdown mail service."
kill -9 ${mail_service_id}

备份脚本

backup.sh

#!/bin/sh

appPath="/app/jar/"
appBackPath="/app/jar/backup/"

cd ${appPath}
jarFileList=`ls | grep jar | awk '{print $1}'`
for file in ${jarFileList}; do
    fileDate=`date -r ${file} '+%Y-%m-%d' | awk '{print $1}'`
    if [[ -f ${file} ]]; then
        mv ${file} "$appBackPath$file.$fileDate"
    fi
done

转移历史文件

#!/bin/bash

#待转出文件所在目录
spath='/ap/spath/'
#目标目录
dpath='/ap/dpath/'
#多少天前的文件
days=30

if [ ! -d "$dpath" ]; then
    mkdir -p $dpath
fi

cd "$spath"

#查找30天之前的文件
fileList=`find $spath* -mtime +$days |awk '{print $1}'`
for file in $fileList
do 
if [ -f $file ]; then
    mv $file $dpath
fi
done

ref:

https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-a-shell-script-on-a-remote-machine
https://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/
https://my.oschina.net/shiyusen/blog/743153

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容