本地获取多台远程linux服务器日志进行备份
需求:
后端应用服务部署在十几台阿里云linux服务器, 需要定时把这些应用的日志备份都某一台服务器进行保存备份(最近180天)
#!/bin/bash
ip_arry=("192.168.1.1" "192.168.1.2")
remote_dir="/opt/logs/"
bakDir=""
for ip in ${ip_arry[@]}
do
echo $ip
folderList=`sudo sshpass -p passwd ssh -o StrictHostKeychecking=no $ip find $remote_dir -type d -ctime -180`
#echo $folderList
fileList=`sudo sshpass -p passwd ssh -o StrictHostKeychecking=no $ip find $remote_dir -type f -ctime -180`
echo $fileList
for folder in $folderList;do #循环判断folder是否存在 不存在就创建
if [ ! -d $folder ];then
mkdir -p $folder
fi;
done;
for file in $fileList;do #循环判断文件是否存在 不存在就从机器上考过来
if [ ! -f $file ];then
sudo sshpass -p kgcx@123 scp -o StrictHostKeychecking=no root@$ip:$file ${file}"_"${ip}".log.gz"
fi;
done;
done
踩过的坑:
1. 第一次远程连接会有交互式操作,采取-o StrictHostKeychecking=no参数跳过
2. 安装sshpass使用sudo sshpass -p passwd避免交互式输入密码
3. 因为后端应用采用分布式部署, 故在文件名上加上ip命名,否则会漏掉部分日志.