Symlinking(ln)比移动(mv)更快?

Cha*_*son 1 performance symlink

当我们构建Web软件版本时,我们将该版本准备在一个临时目录中,然后将release目录替换为刚准备好的临时目录:

# Move and replace existing release directory.
mv /path/to/httpdocs /path/to/httpdocs.before
mv /path/to/$newReleaseName /path/to/httpdocs
Run Code Online (Sandbox Code Playgroud)

在这种方案中,每15个版本中大约有1个用户正好在上述命令运行时正在使用原始版本目录中的文件,并且该用户发生了致命错误.

我想知道在处理时间方面是否使用如下的符号链接会明显加快,从而有助于减少此问题的可能性:

# Remove and replace existing release symlink.
ln -sf /path/to/$newReleaseName path/to/httpdocs
Run Code Online (Sandbox Code Playgroud)

Luk*_*ský 6

使用符号链接的主要优点是你可以原子地完成它.强制新的符号链接不是原子的,但您可以创建新的符号链接,然后将其重命名为现有符号链接.重命名是一个原子操作,所以你应该没有竞争条件.

ln -s /path/to/newrelease /path/to/httpdocs.tmp && mv -Tf /path/to/httpdocs.tmp /path/to/httpdocs
Run Code Online (Sandbox Code Playgroud)