查看“︁Scp”︁的源代码
←
Scp
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:shell]] =SCP 传输尚未完成,文件却被 mv 提前移动,导致备份不完整。这是典型的竞态条件(race condition)问题,尤其在脚本自动化中很常见= <pre> SCP 是异步写入的,文件在传输过程中就已经出现在目标路径(虽然是 .filepart 或临时名),如果此时你脚本里用了 mv 或 rsync 去“备份”它,就可能拿到一个不完整的文件。 #!/bin/bash REMOTE_USER="user" REMOTE_HOST="remote.example.com" REMOTE_FILE="/data/backup.tar.gz" LOCAL_DIR="/local/backup/incoming" FINAL_DIR="/local/backup/final" # 使用 scp 传到临时目录 scp "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_FILE}" "${LOCAL_DIR}/backup.tar.gz.tmp" # 确认传输成功后再原子移动 if [[ $? -eq 0 ]]; then mv "${LOCAL_DIR}/backup.tar.gz.tmp" "${FINAL_DIR}/backup.tar.gz" echo "Backup complete and moved to final location." else echo "SCP failed, not moving incomplete file." exit 1 fi scp fufnc exec 200>"$HOME/.lock/backup.lock" flock 200 scp backup.tar.gz user@remote:/backup/ flock -u 200 mv func exec 200>"$HOME/.lock/backup.lock" flock 200 mv backup.tar.gz /done/ flock -u 200 一个更稳的写法(推荐你用 ( flock -n 200 || exit 1 scp backup.tar.gz user@remote:/backup/ ) 200>"$HOME/.lock/backup.lock" </pre> ==
返回
Scp
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息