【问题标题】:How does this file descriptor and flock work?这个文件描述符和flock是如何工作的?
【发布时间】:2022-01-03 16:21:57
【问题描述】:

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

#!/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 在给定的 /var/lock.. 位置创建/检查锁,但是 100 的意义是什么?

谢谢。

【问题讨论】:

    标签: linux bash shell sh flock


    【解决方案1】:

    flock -n 在给定的 /var/lock.. 位置创建/检查锁

    不,flock 对文件描述符起作用。

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

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

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

    文件描述符见维基百科,见man 2 flockman 2 fcntl

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 2011-10-28
      • 2014-03-14
      • 1970-01-01
      • 2014-04-24
      • 2011-04-28
      • 2011-01-14
      • 1970-01-01
      相关资源
      最近更新 更多