本文目录导读:

使用 rsync 同步(推荐)
基本同步脚本
#!/bin/bash
# 配置变量
LOCAL_DIR="/path/to/local/directory/"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
# 执行同步
rsync -avz --delete $LOCAL_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
带日志和错误处理的同步脚本
#!/bin/bash
# 配置变量
LOCAL_DIR="/path/to/local/directory/"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
LOG_FILE="/var/log/sync.log"
SSH_KEY="/path/to/ssh/private/key"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 检查必要配置
if [ ! -d "$LOCAL_DIR" ]; then
log "错误: 本地目录 $LOCAL_DIR 不存在"
exit 1
fi
# 执行同步
log "开始同步文件..."
rsync -avz --delete \
-e "ssh -i $SSH_KEY" \
--log-file=$LOG_FILE \
--progress \
$LOCAL_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
# 检查同步结果
if [ $? -eq 0 ]; then
log "同步成功完成"
else
log "同步失败!"
exit 1
fi
使用 scp 同步
基本 scp 同步
#!/bin/bash
LOCAL_FILE="/path/to/local/file.txt"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
# 同步单个文件
scp $LOCAL_FILE ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
同步整个目录
#!/bin/bash
LOCAL_DIR="/path/to/local/directory"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
# 递归同步目录
scp -r $LOCAL_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
带排除规则的同步脚本
#!/bin/bash
# 配置
LOCAL_DIR="/path/to/local/directory/"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
EXCLUDE_FILE="/path/to/exclude.txt"
# exclude.txt 内容示例:
# *.log
# .git/
# node_modules/
# temp/
# 执行同步,排除不需要的文件
rsync -avz --delete \
--exclude-from=$EXCLUDE_FILE \
--progress \
$LOCAL_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
if [ $? -eq 0 ]; then
echo "同步成功完成"
else
echo "同步失败"
exit 1
fi
实时监控并同步(使用 inotify)
#!/bin/bash
WATCH_DIR="/path/to/watch/directory"
REMOTE_USER="username"
REMOTE_HOST="remote.server.com"
REMOTE_DIR="/path/to/remote/directory/"
# 监控文件变化并自动同步
inotifywait -m -r -e modify,create,delete,move $WATCH_DIR | while read path action file; do
echo "检测到文件变化: $file - $action"
rsync -avz --delete $WATCH_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
done
带 SSH 密钥配置的完整脚本
#!/bin/bash
# ====== 配置文件 [config.sh] ======
# LOCAL_DIR="/path/to/local/directory/"
# REMOTE_USER="username"
# REMOTE_HOST="remote.server.com"
# REMOTE_DIR="/path/to/remote/directory/"
# SSH_KEY="/path/to/ssh/private/key"
# MAX_RETRIES=3
# LOG_FILE="/var/log/rsync-sync.log"
# ====== 主脚本 [sync.sh] ======
#!/bin/bash
# 加载配置
source ./config.sh
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 错误处理函数
handle_error() {
local retry_count=$1
if [ $retry_count -lt $MAX_RETRIES ]; then
log "重试 #$((retry_count + 1))..."
sleep 5
return 1
else
log "达到最大重试次数 $MAX_RETRIES,同步失败"
exit 1
fi
}
# 检查 SSH 连接
check_ssh_connection() {
ssh -i $SSH_KEY -q ${REMOTE_USER}@${REMOTE_HOST} exit
if [ $? -ne 0 ]; then
log "无法连接到远程服务器 $REMOTE_HOST"
return 1
fi
return 0
}
# 执行同步
sync_files() {
local retry_count=0
while [ $retry_count -lt $MAX_RETRIES ]; do
log "尝试同步文件 (尝试 #$((retry_count + 1)))"
rsync -avz --delete \
-e "ssh -i $SSH_KEY" \
--log-file=$LOG_FILE \
--progress \
--timeout=30 \
$LOCAL_DIR ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}
if [ $? -eq 0 ]; then
log "同步成功完成"
return 0
else
retry_count=$((retry_count + 1))
handle_error $retry_count
fi
done
return 1
}
# 主函数
main() {
log "开始同步脚本"
# 检查本地目录
if [ ! -d "$LOCAL_DIR" ]; then
log "错误: 本地目录 $LOCAL_DIR 不存在"
exit 1
fi
# 检查 SSH 连接
if ! check_ssh_connection; then
exit 1
fi
# 执行同步
if sync_files; then
log "脚本执行完成"
else
log "脚本执行失败"
exit 1
fi
}
# 执行主函数
main
使用说明
- 设置 SSH 密钥认证(推荐):
# 生成 SSH 密钥(如果没有) ssh-keygen -t rsa -b 4096
复制公钥到远程服务器
ssh-copy-id username@remote.server.com
2. **设置脚本执行权限**:
```bash
chmod +x sync.sh
- 设置定时任务(cron):
# 编辑 crontab crontab -e
添加定时任务(每小时同步一次)
0 /path/to/sync.sh
## 注意事项
1. **安全性**:
- 使用 SSH 密钥认证而非密码
- 不要在脚本中硬编码密码
- 限制脚本文件权限(chmod 700)
2. **性能考虑**:
- rsync 比 scp 更高效,支持增量同步
- 使用 `--compress` 或 `-z` 压缩传输
- 合理使用排除规则减少传输量
3. **可靠性**:
- 添加日志记录
- 实现错误处理和重试机制
- 检查网络连接状态
4. **排除文件**:
- 临时文件 (*.tmp)
- 日志文件 (*.log)
- 版本控制目录 (.git, .svn)
- 缓存目录 (node_modules, cache)
选择哪种方法取决于你的具体需求:rsync 适用于定期同步大量文件,scp 适合简单的一次性传输,inotify 适合实时同步场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播