本地执行远程服务器命令

背景

最近在搞自己的网站,需要往服务器上不停的更包,由于服务器配置很低,没必要搭个Jenkins,但是每次更新完代码都要手动打包、上传、启动,觉得很繁琐,所以搞了个全自动的脚本。

特殊说明:以下本地脚本基于mac编写,Windows环境应该差不多(没试过)。

思路

服务器写好重启服务的脚本/root/script/restart.sh,然后在本地使用scp将最新的jar包上传至服务器,再用ssh执行服务器上的重启脚本

脚本

服务器脚本

/root/script/restart.sh

#!/bin/bash

defaultAppName='dental-web-admin.jar'
appName=''

if [[ $1 && $1 != 0 ]]
then
        appName=$1
else
        appName=$defaultAppName
fi

echo ">>>>>>本次重启的应用: $appName <<<<<<"

# 关闭应用方法
stopApp(){
        pid=$( ps -ef |grep $appName |grep 'java -jar'|grep -v grep|awk '{print $2}')
        kill -9 $pid
}

# 启动应用方法
startApp(){
	rm -f nohup.out
		#原始重启命令提取应用名称
        nohup java -jar -Dspring.profiles.active=application-commonBiz-test $appName > nohup.out 2>&1 &
}

# 滚动打印日志
printLog(){
		#日志文件名取决于你输出日志的文件名,默认为nohup.out
        tail -F nohup.out
}
stopApp
startApp
printLog

本地脚本

#!/bin/bash

rm -f ~/git/test.jar
git checkout dev
git pull
mvn package -Dmaven.test.skip=true
mv ./project_name/target/test.jar ~/git/test.jar


# 上传文件 --------------------------------------
/usr/bin/expect <<-EOF
# 设置超时时间
set timeout 100000
spawn scp -o ConnectTimeout=30000 ~/git/test.jar root@你的服务器ip:/root/server/
expect -exact "root@你的服务器ip's password:"
send "你的服务器登录密码\r"
expect "100%"
expect eof
EOF
# 上传文件结束 --------------------------------------

# 调用服务器脚本重启服务 --------------------------------------
/usr/bin/expect <<-EOF
set timeout 100000
spawn ssh -p 22 root@你的服务器ip
expect -exact "root@你的服务器ip's password:"
send "你的服务器登录密码\r"
expect "]# "
send "sh /root/script/restart.sh\r"
expect "nohup.out"
exit 0
expect eof
EOF
# 调用服务器脚本重启服务结束 --------------------------------------



git checkout feature/wangsen
git pull
git merge dev
git push
mvn clean

执行的效果如下:

接下来再有代码改动时,只需要本地执行下脚本,一个回车即可自动完成 打包 > 上传 > 重启,happy

补充

可以把脚本加到环境变量中,执行更方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值