有没有办法将文件夹 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 服务器。