又是在网上大量搜索而得不到满意结果的我,不得不自己搞一个出来,而且作为开发的我,写这么一个脚本,也是为作为开发却不得不搞运维工作的你提供一个方便!希望能帮到你!
先说一下需求:springboot项目(jar包)同时部署到五台服务器上,每次更新包的时候,都得一台一台的去更新,很烦的,为什么不能实现一个自动化同步更新部署呢?那明白了需求之后呢,大家就知道这个脚本到底适不适合自己,这里呢我直接贴脚本代码,大家要灵活修改里面的内容哟!
正确使用步骤:
第一步:本地服务器能够免密登录到其他服务器,如果不能,请按以下步骤执行:
1.本地服务器生成公钥和私钥
ssh-keygen
2.将本地生成的公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.11
如果没有ssh-copy-id命令,直接cat ~/.ssh/id_rsa.pub将内容复制到远程主机的~/.ssh/authorized_keys文件中保存即可。
3.直接登录,或者rsync,或者其他操作,都不需要输入密码了。
以上操作以后 服务器可以免密登录的前提下 即可执行此脚本文件!
第二步:修改一下脚本为自己合适的脚本即可使用
脚本语法说明:ssh $1 "cd /data/app/web ; ./stop.sh && ./start.sh"
这句的意思是,在本地服务器执行远程服务器上的脚本,其中$1很重要,这样就可以执行一些命令重启远程服务器上的项目了,而且可以执行任何操作!
#!/bin/sh
JAVA_OPTS=/data/app/web/xxx.jar
LOG_OPTS=/data/app/web/boot.log
IPs=("root@192.168.1.1" "root@192.168.1.2" "root@192.168.1.3" "192.168.1.4")
sync(){
echo "$1 开始同步!"
rsync -avz $JAVA_OPTS $1:$JAVA_OPTS
echo "$1 文件同步完成!"
echo "$1 项目开始启动!"
ssh $1 "cd /data/app/web ; ./stop.sh && ./start.sh"
echo "$(date "+%Y-%m-%d %H:%M:%S") 开始检查项目是否启动"
while [ -f $LOG_OPTS ]
do
result=`ssh $1 tail "$(date "+%Y-%m-%d %H:%M")" $LOG_OPTS | grep "content-server start success"`
if [[ "$result" != "" ]]
then
echo "项目正在启动..."
break
else
echo "项目等待启动中..."
sleep 1s
fi
done
echo "$1 项目启动成功!启动时间为:$(date "+%Y-%m-%d %H:%M:%S")"
}
for (( k=0; k <= 3; k++ ))
do
IP=${IPs[$k]}
sync $IP
done
echo "======================================================="
echo "======================================================="
echo "===================全部同步完成!======================"
echo "======================================================="
echo "======================================================="
echo "======================================================="