这个文件描述符和 flock 是如何工作的?

How does this file descriptor and flock work?

我想始终在后台执行一个 shell 脚本到 运行。该脚本将 将其添加到 运行ning 的启动应用程序中。在尝试确保一次只有一个实例 运行 时,我遇到了这段代码:

#!/bin/bash
another_instance()
{
echo “There is another instance running, exiting”
exit 1
}
( flock -n 100 || another_instance DEST=/home/backup/`date +%s` mkdir -p “$DEST” rsync -avz root@myhost:/home/web “$DEST/.” ) 100>/var/lock/dobackup.lock

here,解释:

在这个例子中,我们使用文件描述符 100 重定向到锁定文件。另外,如果 flock 失败,我们调用 another_instance,通知有另一个实例然后退出。

有效,但我不理解文件描述符 100 部分。我试着在网上看,但我的困惑占了上风。 有人可以解释一下 flock -n 100100>/var/lock/dobackup.lock 吗?

据我了解,flock -n creates/checks 在给定 /var/lock.. 位置锁定,但是 100 有什么意义?

谢谢。

flock -n creates/checks for a lock at the given /var/lock.. location

不,flock 作用于文件描述符。

/var/lock 系统管理员 锁定 全局实用程序 的典型位置。例如包管理器(pacmanapt-get 等)。您可以在任何地方使用(好的,几乎)任何文件 flock.

一般来说,flock 是一个 属性 与一个 文件 相关联 文件描述符。数字 100 并不重要,它必须是任何打开的以写入文件描述符。

100>/var/lock/dobackup.lock 将文件描述符 100 重定向到文件 /var/lock/dobackup.lockflock -n 100 在文件描述符 100 上应用 flock。当文件描述符 100 关闭时(进程终止时发生),与该进程关联的 flock 将自动解除。

有关文件描述符,请参阅维基百科,请参阅 man 2 flockman 2 fcntl