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