问题标签 [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.
python - 仅在未运行时使用 cron 运行 python 脚本
我需要每分钟运行一个 python 脚本(job.py)。如果该脚本已在运行,则不得启动它。它的执行时间可以在 10 秒到几个小时之间。
所以我把我的 crontab :
为了避免在脚本已经运行时启动它,我使用了flock()。
这是脚本(job.py):
这种方法似乎有效。
有什么我想念的吗?使用这种方法会遇到什么麻烦吗?
是否有更多建议或“适当”的方式来实现这种行为?
我感谢你的任何建议。
php - PHP 群()替代
PHP 的文档页面flock()
表明在 IIS 下使用是不安全的。如果我不能flock
在任何情况下都依赖,有没有另一种方法可以安全地实现同样的目标?
bash - bash羊群:如果无法获得锁则退出
以下锁定机制用于防止cron
作业并发运行:
当同时运行两个实例时,后者会等到第一个实例完成,然后再运行。这可能会导致等待运行的脚本积压。
如何更改此脚本,以便如果flock
无法获取锁,它会终止脚本?我试过-n
没有成功。
apache - 当 WCHAN = flock_lock_file_wait 时如何判断 Apache 正在等待哪个文件
我们的网络服务器出现问题,越来越多的 Apache 进程卡住等待文件锁定(由 PHPflock() 引起)以某种方式解决,但从未解决。最终站点变得越来越慢,最后完全停止,直到 Apache 重新启动。
我正在研究某种错误代码背后的理论,也许是在我们自己开发的磁盘缓存机制中。但我无法追踪它。(我们在 Ubuntu 上运行。)
我的问题是,我怎样才能知道它卡在了哪个文件或哪些文件上?如果我能看到挂断在哪里,我就可以更容易地找出错误代码在哪里。当我执行此命令时:
我明白了:
我有什么办法可以从这里查看 Apache 锁定/等待的确切文件吗?
c# - 聚集和包围而不是远离?
是否有任何聚集的例子,羊群包围并与目标交战,而不是像鱼一样疯狂觅食,然后猛扑进去然后飞走?
我正在开发一个头顶射手,我希望这群近战敌人冲向敌人并包围他并继续攻击,同时更多的文件在后面。我试图避免它们都聚集在一个地方,并且聚集似乎很完美,但是所有“移动到目标”的例子都让它们移动到目标然后立即离开。
想法?
linux - 如何防止 linux flock(2) 饿死排他锁请求?
我在linux中使用flock(2)来控制对自制数据库中资源的访问,同时使用共享和独占锁定模式。我发现如果一个共享锁被授予,那么另一个进程也可以获得共享锁,而不管是否有阻塞的进程在等待排他锁。这意味着对于具有许多重叠读者的流行资源,排他锁请求可能会饿很长时间,也许永远。
这种行为与flock(2) 手册页并不矛盾,但它让我感到惊讶,因为这段代码已经在FreeBSD 和OS-X 中运行了多年,没有出现任何问题。我的猜测是 BSD 系统必须实现某种队列来防止独占锁永远饿死。
我的主要问题是,是否有任何简单的技巧或编程模式可以防止我的独占锁挨饿?
第二个问题,为了满足我的好奇心,有没有人知道这在 BSD 系统上是否真的像我怀疑的那样不同?
shell - 为群实用程序选择文件句柄
实用程序手册页提供了以下flock
使用示例:
假设200
是锁定文件的文件句柄,是否有可能在某些运行期间失败,因为同一个文件句柄已被其他进程使用?如果是这样,是否有任何技巧可以确保锁定flock
可靠地工作?
php - PHP访问已被锁定以进行编辑的文件 - 权限被拒绝错误
我正在做一些 csv 解析,如果我在调用 fclose() 函数之前取消解析(通过导航到不同的页面或刷新),当我返回并再次启动程序时会收到以下错误:
当我尝试在 excel 中打开电子表格.csv 文件时,我收到一个“正在使用的文件”错误,说“电子表格.csv 已锁定以供'另一个用户'编辑。”我知道我的 php 服务器当前卡在尝试访问文件的状态。有没有办法可以使用 php 检查文件是否被锁定以进行编辑,然后将其解锁?
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
被解析的。
所以我正在阅读我的密码文件
问题
显然,我想flock
或lockf
密码文件,以确保只有一个进程正在读取或写入它。要调用这些函数,我需要获取ifstream jsinpass
. 但是谷歌主要给了我Kreckel 的 fileno(我觉得它很完整,但有点疯狂)来获取 an 的文件描述符,std::ifstream
我不确定构造函数不会预先读取其中的一些。因此我的问题是:
如何锁定 C++ ifstream
(Linux、GCC 4.6)?
(或者您是否找到其他方法来解决该问题?)
谢谢
linux - 如何在 Linux 机器上锁定 C 中的目录
将flock 或lockf 在目录上工作吗?我还有另一种方法可以在 linux 机器上锁定 C 中的目录吗?