1、设置服务器访问其他服务器免密ssh
操作支持免密访问异地服务器
ssh-keygen -t rsa
默认enter按下去就可以,然后公钥传输到异地服务器,有多台需要复制的就复制到多台服务器,后续使用scp命令即可免密
cd ~
scp -p .ssh/id_rsa.pub root@192.168.0.26:/root/.ssh/authorized_keys
2、编写脚本进行本地备份,自动拷贝到其他服务器,并执行重启命令
#!/bin/bash
projectname=你的文件夹名称
#第一步开始备份
date=$(date +%Y-%m-%d)
echo '正在备份本地文件到文件夹'$projectname"_bak_"$date'预计23秒,请稍候...'
cp -rf /data/$projectname/ /data/$projectname"_bak_"$date
#第二步扩散复制到其他服务器,下面内容请自定义,每个软件需要拷贝的内容都不一样
echo '正在扩散程序包到 15 16 20 21 服务器'
scp -r /data/$projectname/config/* root@192.168.90.15:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.16:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.20:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.21:/data/$projectname/config/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.15:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.16:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.20:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.21:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.15:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.16:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.20:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.21:/data/$projectname/a-app/lib/
#远程启动14服务器服务
echo '重启本地应用服务'
sh /data/$projectname/01startup-app.sh
#远程启动15服务器服务
echo 重启15服务器对应服务
ssh root@192.168.90.15 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 15 service startup!
#远程启动16服务器服务
echo '重启16服务器对应服务'
ssh root@192.168.90.16 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 16 service startup!
#远程启动20服务器服务
echo 重启20服务器对应服务
ssh root@192.168.90.20 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 20 service startup!
#远程启动21服务器服务
echo 重启21服务器对应服务
ssh root@192.168.90.21 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 21 service startup!
3、自动关闭现有java应用并重新启动的启动脚本
一般我们需要自己查找java应用进程 ps -ef|grep xxx kill-9 1111 来结束已经启动的java应用,然后重新启动java应用。下面这个脚本可以自己完成这个过程,只要启动脚本即可完成java应用的重启,配合上面的脚本才能做到多服务器批量自动更新java应用。
01startup-app.sh
#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
arr=`ps -ef | grep a-app-v1.0.0 | grep -v grep | awk '{print $2}'`
echo get pid: ${arr}
for i in ${arr[@]};do
echo kill pid ${i}...
kill -9 ${i}
done;
echo kill finished!
cd ${basepath}
echo start application
nohup java -Xmx150M -Xms150M -jar -Dfile.encoding=UTF-8 -Dloader.path=${basepath}/a-app/lib,${basepath}/a-app/config ${basepath}/a-app/a-app-v1.0.0.jar.original >/dev/null 2>&1 &
echo start end...
上面的内容a-app-v1.0.0 替换为自己的jar名称,java 启动命令自定义改进,包括目录结构,仅提供一个思路。