需求
大数据部门需要服务器的日志,需将其他机器的日志文件传输到大数据服务器的指定路径供其使用。
思路
要想做一个通用脚本,可应用在不同的场景,所以其中一些参数不能写死。
可在执行时脚本时需要带3个参数,分别是源日志的路径
,源文件名
,目的服务器保存路径
并且将源日志文件规范命名,得到[文件名-日期-当前IP].log
这种格式的日志文件。
实现
脚本
#!/bin/bash
# 验证参数数量是否正确
if [ "$#" -ne 3 ]; then
echo "使用方法:sh script.sh <源日志路径> <源文件名(不加后缀与日期)> <目的服务器保存路径>"
exit 1
fi
# 通过参数获取源日志文件路径、源文件名和传输到目的的保存路径
src="$1"
file_name="$2"
dest_dir="$3"
# 目的IP地址
dest_ips=("10.23.228.101" "10.23.119.51" "10.23.62.164")
# 获取当前日期和时间
now_date=$(date +"%Y%m%d %H:%M:%S")
# 获取前一天和前两天的日期
before_day=$(date -d "1 day ago" +"%Y%m%d")
before_2days=$(date -d "2 day ago" +"%Y%m%d")
# 获取当前主机的内网IP地址
current_ip=$(hostname -I | awk '{print $1}')
# --------------------脚本内容--------------------#
# 创建logs目录(如果不存在)
mkdir -p ./logs
echo "创建logs目录(如果不存在):成功"
# 复制文件到脚本目录
cp "$src/$before_day""_""$file_name""_report.log" ./logs/
echo "复制文件到脚本目录:成功"
# 重命名文件
mv "./logs/$before_day""_""$file_name""_report.log" "./logs/$file_name-$before_day-$current_ip.log"
echo "重命名文件:成功"
# 更改权限
chmod 777 "./logs/$file_name-$before_day-$current_ip.log"
echo "更改文件权限:成功"
# 遍历目标IP列表,并将文件传输到每个目标IP
for dest_ip in "${dest_ips[@]}"; do
# 检查目标IP是否存在
if ssh "rsyncbifile@$dest_ip" "[ -d $dest_dir ]"; then
# 使用scp命令将文件传输到目标服务器
if scp "./logs/$file_name-$before_day-$current_ip.log" "rsyncbifile@$dest_ip:$dest_dir"; then
echo "$now_date 将文件传输到目标服务器 $dest_ip:成功"
else
echo "$now_date 将文件传输到目标服务器 $dest_ip:失败"
fi
else
# 创建目标IP的保存路径
if ssh "rsyncbifile@$dest_ip" "mkdir -p $dest_dir"; then
# 使用scp命令将文件传输到目标服务器
if scp "./logs/$file_name-$before_day-$current_ip.log" "rsyncbifile@$dest_ip:$dest_dir"; then
echo "$now_date 将文件传输到目标服务器 $dest_ip:成功"
else
echo "$now_date 将文件传输到目标服务器 $dest_ip:失败"
fi
else
echo "$now_date 在目标服务器 $dest_ip 上创建目录 $dest_dir:失败"
fi
fi
done
# 删除两天前的文件和脚本目录中的文件
rm -rf "./logs/$file_name-$before_2days-$current_ip.log"
rm -rf "$src/$file_name.$before_2days.log"
循环执行
创建定时任务,让其每日定时执行
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)