繁体   English   中英

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

[英]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 100100>/var/lock/dobackup.lock吗?

据我了解,flock -n 在给定的 /var/lock.. 位置创建/检查锁,但是 100 的意义是什么?

谢谢你。

您为什么不选择编写 systemd 服务有什么特别的原因吗?

您没有提到您正在使用的操作系统 - 这可能是原因。 否则我会 go 用于 systemd。

您可以轻松跟踪进程的 PID,确保进程始终由系统启动等。一些适合从文章开始

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

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

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

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

100>/var/lock/dobackup.lock将文件描述符100重定向到文件/var/lock/dobackup.lock flock -n 100在文件描述符100上应用羊群。

有关文件描述符,请参见 Wikipedia,请参见man 2 flockman 2 fcntl

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM