腳本邏輯 第一次會下載,第二次比較如果有就不下載
文件已存在:
如果目標目錄中已經存在同名文件,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