[英]How does this file descriptor and flock work?
我想实现一个 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
在这里,有解释:
在此示例中,我们在重定向到锁定文件时使用文件描述符 100。 另外,如果flock失败,我们调用another_instance,通知有另一个实例,然后退出。
它有效,但我不理解文件描述符 100 部分。 我尝试在网上查找,但我的困惑占了上风。 有人可以解释一下flock -n 100
和100>/var/lock/dobackup.lock
吗?
据我了解,flock -n 在给定的 /var/lock.. 位置创建/检查锁,但是 100 的意义是什么?
谢谢你。
您为什么不选择编写 systemd 服务有什么特别的原因吗?
您没有提到您正在使用的操作系统 - 这可能是原因。 否则我会 go 用于 systemd。
您可以轻松跟踪进程的 PID,确保进程始终由系统启动等。一些适合从文章开始
flock -n 在给定的 /var/lock.. 位置创建/检查锁
不,flock 适用于文件描述符。
/var/lock
是系统管理员为全局实用程序放置锁的典型位置。 例如 package 管理器( pacman
, apt-get
等)。 您可以在任何地方使用(好吧,几乎)任何文件和flock
。
假设一般来说, flock
是与文件描述符引用的文件相关联的属性。 数字100
并不重要,它必须是任何打开的才能写入文件描述符。
100>/var/lock/dobackup.lock
将文件描述符100
重定向到文件/var/lock/dobackup.lock
。 flock -n 100
在文件描述符100
上应用羊群。
有关文件描述符,请参见 Wikipedia,请参见man 2 flock
和man 2 fcntl
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.