欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > sh脚本把服务器B,服务器C目录的文件下载到服务器A目录,添加开机自启动并且一小时执行一次脚本

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

2025/2/24 6:16:04 来源:https://blog.csdn.net/lgq1368853532/article/details/145794412  浏览:    关键词: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=$1echo "正在从 $host 下载文件..." | tee -a "$LOG"# 获取远程目录中的文件列表file_list=$(sshpass -p "$SERVER_PASSWORD" ssh -p $SERVER_PORT $SERVER_USER@$host "ls $REMOTE_DIR")if [ $? -ne 0 ]; thenecho "$(date): 无法获取 $host 的文件列表" | tee -a "$LOG"exit 1fi# 统计文件数量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_DIRif [ $? -eq 0 ]; thenecho "$(date): 从 $host 下载文件成功" | tee -a "$LOG"echo "下载文件数量: $file_count" | tee -a "$LOG"elseecho "$(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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词