所有内容在本地保存后,使用 Rsync 提交 transfer/mv

所有内容在本地保存后,使用 Rsync 提交 transfer/mv

有没有办法将文件夹 rsync 到删除服务器文件夹,但仅在整个传输完成后才移动所有内容?

我不希望文件一个接一个地移动,因为这会导致正在运行的网络服务器出现问题。

我希望在服务器上传输完所有内容后再移动整个文件夹(这大约需要 1 秒)

答案1

您正在寻找--延迟更新选项。来自man rsync

   --delay-updates
          This  option puts the temporary file from each updated file into
          a holding directory until the end of the transfer, at which time
          all  the files are renamed into place in rapid succession.  This
          attempts to make the updating of the files a little more atomic.
          [...]
          See  also the "atomic-rsync" perl script in the "support" subdir
          for an update algorithm  that  is  even  more  atomic  (it  uses
          --link-dest and a parallel hierarchy of files).

答案2

最安全的方法是让 rsync 将文件放在 Web 服务器的 docroot 之外的备用目录中。然后更改服务器配置以将 docroot 指向新文件夹,并向 Web 服务器发出信号以执行“优美”重新加载其配置。使用 Apache,这应能保证不会出现请求被错误处理或丢弃的情况。

USR1 或优雅信号会导致父进程建议子进程在当前请求之后退出(如果子进程没有提供任何服务,则立即退出)。父进程重新读取其配置文件并重新打开其日志文件。当每个子进程死亡时,父进程会用新一代配置中的子进程替换它,该子进程会立即开始处理新请求。

换句话说,我会使用 shell 脚本和 ssh 自动执行此操作,而不是尝试寻找 rsync 选项来管理您的 web 服务器。

相关内容