问题标签 [flock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6526 浏览

python - 仅在未运行时使用 cron 运行 python 脚本

我需要每分钟运行一个 python 脚本(job.py)。如果该脚本已在运行,则不得启动它。它的执行时间可以在 10 秒到几个小时之间。

所以我把我的 crontab :

为了避免在脚本已经运行时启动它,我使用了flock()。

这是脚本(job.py):

这种方法似乎有效。

有什么我想念的吗?使用这种方法会遇到什么麻烦吗?

是否有更多建议或“适当”的方式来实现这种行为?

我感谢你的任何建议。

0 投票
7 回答
7953 浏览

php - PHP 群()替代

PHP 的文档页面flock()表明在 IIS 下使用是不安全的。如果我不能flock在任何情况下都依赖,有没有另一种方法可以安全地实现同样的目标?

0 投票
2 回答
12577 浏览

bash - bash羊群:如果无法获得锁则退出

以下锁定机制用于防止cron作业并发运行:

当同时运行两个实例时,后者会等到第一个实例完成,然后再运行。这可能会导致等待运行的脚本积压。

如何更改此脚本,以便如果flock无法获取锁,它会终止脚本?我试过-n没有成功。

0 投票
1 回答
1474 浏览

apache - 当 WCHAN = flock_lock_file_wait 时如何判断 Apache 正在等待哪个文件

我们的网络服务器出现问题,越来越多的 Apache 进程卡住等待文件锁定(由 PHPflock() 引起)以某种方式解决,但从未解决。最终站点变得越来越慢,最后完全停止,直到 Apache 重新启动。

我正在研究某种错误代码背后的理论,也许是在我们自己开发的磁盘缓存机制中。但我无法追踪它。(我们在 Ubuntu 上运行。)

我的问题是,我怎样才能知道它卡在了哪个文件或哪些文件上?如果我能看到挂断在哪里,我就可以更容易地找出错误代码在哪里。当我执行此命令时:

我明白了:

我有什么办法可以从这里查看 Apache 锁定/等待的确切文件吗?

0 投票
3 回答
538 浏览

c# - 聚集和包围而不是远离?

是否有任何聚集的例子,羊群包围并与目标交战,而不是像鱼一样疯狂觅食,然后猛扑进去然后飞走?

我正在开发一个头顶射手,我希望这群近战敌人冲向敌人并包围他并继续攻击,同时更多的文件在后面。我试图避免它们都聚集在一个地方,并且聚集似乎很完美,但是所有“移动到目标”的例子都让它们移动到目标然后立即离开。

想法?

0 投票
1 回答
815 浏览

linux - 如何防止 linux flock(2) 饿死排他锁请求?

我在linux中使用flock(2)来控制对自制数据库中资源的访问,同时使用共享和独占锁定模式。我发现如果一个共享锁被授予,那么另一个进程也可以获得共享锁,而不管是否有阻塞的进程在等待排他锁。这意味着对于具有许多重叠读者的流行资源,排他锁请求可能会饿很长时间,也许永远。

这种行为与flock(2) 手册页并不矛盾,但它让我感到惊讶,因为这段代码已经在FreeBSD 和OS-X 中运行了多年,没有出现任何问题。我的猜测是 BSD 系统必须实现某种队列来防止独占锁永远饿死。

我的主要问题是,是否有任何简单的技巧或编程模式可以防止我的独占锁挨饿?

第二个问题,为了满足我的好奇心,有没有人知道这在 BSD 系统上是否真的像我怀疑的那样不同?

0 投票
1 回答
445 浏览

shell - 为群实用程序选择文件句柄

实用程序手册页提供了以下flock使用示例:

假设200是锁定文件的文件句柄,是否有可能在某些运行期间失败,因为同一个文件句柄已被其他进程使用?如果是这样,是否有任何技巧可以确保锁定flock可靠地工作?

0 投票
2 回答
1533 浏览

php - PHP访问已被锁定以进行编辑的文件 - 权限被拒绝错误

我正在做一些 csv 解析,如果我在调用 fclose() 函数之前取消解析(通过导航到不同的页面或刷新),当我返回并再次启动程序时会收到以下错误:

当我尝试在 excel 中打开电子表格.csv 文件时,我收到一个“正在使用的文件”错误,说“电子表格.csv 已锁定以供'另一个用户'编辑。”我知道我的 php 服务器当前卡在尝试访问文件的状态。有没有办法可以使用 php 检查文件是否被锁定以进行编辑,然后将其解锁?

0 投票
4 回答
3613 浏览

c++ - 在 Linux (GCC 4.6) 上聚集一个 C++ ifstream

语境

我正在慢慢地用 C++ 编写一个专门的 Web 服务器应用程序(使用 C onion http 服务器库JSONCPP 库进行 JSON 序列化,如果这很重要的话)。对于带有 GCC 4.6 编译器的 Linux 系统(我不关心可移植性到非 Linux 系统,或 4.5 之前的 GCC 或 3.0 之前的 Clang)。

我决定将用户“数据库”(用户很少,可能只有一两个,所以性能不是问题,并且 O(n) 访问时间是可以接受的)以 JSON 格式保存,可能是 JSON 的小数组像这样的物体

按照惯例(à la .htpasswd),该_crypasswd字段是用户密码的crypt(3) “加密”,按_user名称加盐;

我想通过 Json 对象来描述用户的原因是我的应用程序可能会在描述用户的此类 Json 对象中添加(而不是替换)一些 JSON 字段(例如privileges上面的)。我使用JsonCpp作为 C++ 的 Json 解析库。这个库想要一个ifstream被解析的。

所以我正在阅读我的密码文件


问题

显然,我想flocklockf密码文件,以确保只有一个进程正在读取或写入它。要调用这些函数,我需要获取ifstream jsinpass. 但是谷歌主要给了我Kreckel 的 fileno(我觉得它很完整,但有点疯狂)来获取 an 的文件描述符,std::ifstream我不确定构造函数不会预先读取其中的一些。因此我的问题是

如何锁定 C++ ifstream(Linux、GCC 4.6)?

(或者您是否找到其他方法来解决该问题?)

谢谢

0 投票
2 回答
8024 浏览

linux - 如何在 Linux 机器上锁定 C 中的目录

将flock 或lockf 在目录上工作吗?我还有另一种方法可以在 linux 机器上锁定 C 中的目录吗?