当前位置: 首页 > news >正文

sh脚本把服务器B,服务器C目录的文件下载到服务器A目录,添加开机自启动并且一小时执行一次脚本

脚本逻辑 第一次会下载,第二次比较如果有就不下载
文件已存在:
如果目标目录中已经存在同名文件,rsync 会比较源文件和目标文件的大小和修改时间。
如果源文件和目标文件的大小和修改时间完全相同,rsync 会跳过该文件,不会重新下载。
如果源文件和目标文件的大小或修改时间不同,rsync 会重新下载并覆盖目标文件。
文件不存在:
如果目标目录中不存在同名文件,rsync 会直接下载该文件。

下载
https://sourceforge.net/projects/sshpass/files/sshpass/1.10/

链接2
RPM resource sshpass

在服务器A上面执行    把压缩包上传到你要放的目录

tar xvzf sshpass-1.10.tar.gz

 cd sshpass-1.10
 ./configure

 make

 make install

 sshpass -V

卸载

cd sshpass-1.05/

make uninstall

make clean

脚本内容,名称自己起,假设除了ip其它都一致
 

#!/bin/bash

# 服务器信息
SERVER_USER="1"
SERVER_PORT="2"
SERVER_PASSWORD="xx"
REMOTE_DIR="/f1/"
LOCAL_DIR="/fdown/"
LOG="/opt/xx.log"

# 服务器 IP 地址
1_HOST="10.1"  # 服务器1
2_HOST="10.2"   # 服务器2

# 初始化文件计数器
TOTAL_FILES=0

# 下载函数
download_files() {
    local host=$1
    echo "正在从 $host 下载文件..." | tee -a "$LOG"

    # 获取远程目录中的文件列表
    file_list=$(sshpass -p "$SERVER_PASSWORD" ssh -p $SERVER_PORT $SERVER_USER@$host "ls $REMOTE_DIR")
    if [ $? -ne 0 ]; then
        echo "$(date): 无法获取 $host 的文件列表" | tee -a "$LOG"
        exit 1
    fi

    # 统计文件数量
    file_count=$(echo "$file_list" | wc -l)
    TOTAL_FILES=$((TOTAL_FILES + file_count))

    # 使用 rsync 下载文件,并记录文件名
    echo "以下文件将从 $host 下载:" | tee -a "$LOG"
    echo "$file_list" | tee -a "$LOG"

    sshpass -p "$SERVER_PASSWORD" rsync -avz -e "ssh -p $SERVER_PORT" $SERVER_USER@$host:$REMOTE_DIR/ $LOCAL_DIR
    if [ $? -eq 0 ]; then
        echo "$(date): 从 $host 下载文件成功" | tee -a "$LOG"
        echo "下载文件数量: $file_count" | tee -a "$LOG"
    else
        echo "$(date): 从 $host 下载文件失败" | tee -a "$LOG"
        exit 1  # 失败时退出脚本
    fi
}

# 无限循环,每 1 小时执行一次
while true; do
    # 从服务器1下载文件
    download_files "$1_HOST"

    # 从服务器2下载文件
    download_files "$2_HOST"

    echo "$(date): 所有文件下载完成" | tee -a "$LOG"
    echo "总下载文件数量: $TOTAL_FILES" | tee -a "$LOG"

    # 休眠 1 小时
    sleep 3600
done

赋权 chmod +x 脚本

执行 脚本.sh
把脚本加入自启动

创建一个新的 systemd 服务单元文件:

sudo vim /etc/systemd/system/ziqidong.service

在打开的文件中添加以下内容:

[Unit]

Description=Process Watchdog Service

After=network.target

[Service]

Type=simple

ExecStart=/opt/watchdog/ziqidong.sh  

Restart=on-failure

[Install]

WantedBy=multi-user.target

一定要赋权

chmod -R 777 脚本目录

重新加载 systemd 配置:

sudo systemctl daemon-reload

设置开机自启动:

sudo systemctl enable ziqidong.service

启动服务:

sudo systemctl start ziqidong.service

# 关闭 docker 后台服务

# 如果提示“Warning: Stopping docker.service, but it can still be activated by: docker.socket”,则执行 systemctl stop docker.socket 即可

sudo systemctl stop ziqidong.service

# 重启 docker 服务

sudo systemctl restart ziqidong.service

检查服务状态:

sudo systemctl status ziqidong.service

http://www.dtcms.com/a/32234.html

相关文章:

  • 蓝桥与力扣刷题(蓝桥 交换瓶子)
  • ctfshow——phps源码泄露
  • Java APM如何Profiling:使用火焰图多维度分析应用性能瓶颈
  • Java Idea配置问题
  • 【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】
  • 2502C++,C++继承的多态性
  • 【误差理论与可靠性】第二章 可靠性的基本概念和参数体系
  • 25林业研究生复试面试问题汇总 林业专业知识问题很全! 林业复试全流程攻略 林业考研复试真题汇总
  • 【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
  • 京东外卖骑手全部缴纳五险一金
  • 1.vue使用vite构建初始化项目
  • C/C++ 中 volatile 关键字详解
  • 用C++实现一个简单的算法:快速排序(QuickSort)
  • 本周行情——250222
  • 使用 DeepSeek 和 ECharts 实现大屏数据可视化
  • Flutter 启动优化
  • 如何对比软件需求做的是否合格?
  • 在 JavaScript 中接入 Facebook 事件
  • Apache Hop:开源版本的Kettle
  • 标准I/O与文件I/O
  • LeetCode51
  • SpringSecurity设置白名单
  • epoll_event的概念和使用案例
  • 如何保存爬虫获取商品评论的数据?
  • 【AI时代】基于AnythingLLM+ Ollama + DeepSeek 搭建本地知识库
  • GeoHD - 一种用于智慧城市热点探测的Python工具箱
  • redis缓存与Mysql数据一致性,要如何解决?
  • Unity贴图与模型相关知识
  • GTSAM 库详细介绍与使用指南
  • DeepSeek全链路开发指南:从零搭建智能问答系统到API无缝对接【内含知识库实战】