#!/bin/bash
# 定义目标服务器
TARGET_SERVER="192.168.xxx.xxx"
TARGET_USER="root"
# 定义要同步的文件或者目录
FROM_TO_FILES=(
"/data/backend/expert/expert-admin.jar, /data/jars/expert/expert-admin.jar"
"/data/backend/expert/application.yml, /data/jars/expert/conf/application.yml"
"/data/backend/expert/application-local.yml, /data/jars/expert/conf/application-local.yml"
"/data/frontend/expert, /data/html/expert"
"/data/frontend/h5, /data/html/h5"
)
# 定义要执行的远程命令文件
COMMAND_FILE="/data/jars/expert/ry.sh"
# 定义远程命令文件的参数
COMMAND_ARGS="restart"
# 安装sshpass(如果未安装)
if ! command -v sshpass &> /dev/null; then
echo "sshpass未安装!"
exit 1
# sudo apt-get install -y sshpass # Debian/Ubuntu
# 如果是CentOS/RHEL,使用以下命令:
# sudo yum install -y sshpass
fi
# 提示用户输入密码
read -s -p "请输入B服务器的密码: " SERVER_PASSWORD
echo
# 遍历文件列表并执行同步,如果本地是目录则先删除远程目录
for FROM_TO in "${FROM_TO_FILES[@]}"; do
IFS=',' read -r FROM TO <<< "$FROM_TO"
FROM=$(echo "$FROM" | xargs) # 去除前后空格
TO=$(echo "$TO" | xargs) # 去除前后空格
if [[ -d "$FROM" ]]; then
echo "同步目录:$FROM 到 $TARGET_USER@$TARGET_SERVER:$TO"
sshpass -p ${SERVER_PASSWORD} ssh "$TARGET_USER@$TARGET_SERVER" "rm -rf $TO"
sshpass -p ${SERVER_PASSWORD} scp -r "$FROM" "$TARGET_USER@$TARGET_SERVER:$TO"
else
echo "同步文件:$FROM 到 $TARGET_USER@$TARGET_SERVER:$TO"
sshpass -p ${SERVER_PASSWORD} scp "$FROM" "$TARGET_USER@$TARGET_SERVER:$TO"
fi
done
# 执行远程命令
sshpass -p ${SERVER_PASSWORD} ssh "$TARGET_USER@$TARGET_SERVER" "bash $COMMAND_FILE $COMMAND_ARGS"
# 检查命令执行结果
if [ $? -eq 0 ]; then
echo "远程命令执行成功!"
else
echo "远程命令执行失败!"
exit 1
fi
# 提示用户操作完成
echo "所有文件同步和远程命令执行完成!"
echo "请检查目标服务器上的文件和服务状态。"
# 结束脚本
exit 0
网友评论