需求

大数据部门需要服务器的日志,需将其他机器的日志文件传输到大数据服务器的指定路径供其使用。

思路

要想做一个通用脚本,可应用在不同的场景,所以其中一些参数不能写死。
可在执行时脚本时需要带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"

循环执行

创建定时任务,让其每日定时执行

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。