【发布时间】:2014-07-21 04:20:11
【问题描述】:
我有一个 php-cli 脚本,由 cron 每个 5 minutes 运行。因为这个间隔很短,所以multiple processes同时运行。这不是我想要的,因为这个脚本必须在文本文件中写入一个数字id,每次都会递增。碰巧writers同时在这个文本文件上写入,写入的值不正确。
我尝试使用 php 的 flock 函数来阻止写入文件,当另一个进程正在写入文件但它不起作用时。
$fw = fopen($path, 'r+');
if (flock($fw, LOCK_EX)) {
ftruncate($fw, 0);
fwrite($fw, $latestid);
fflush($fw);
flock($fw, LOCK_UN);
}
fclose($fw);
所以我想解决这个问题的方法是创建一个bash 脚本来验证是否有这个php script 的实例正在运行,如果是,它应该等到它完成。但是我不知道该怎么做,有什么想法吗?
【问题讨论】:
-
脚本运行超过5分钟?
-
明确一点,其他进程也在使用flock,对吗?
-
@etherous,是的,所有进程都运行相同的
php script。 -
@MarcellFülöp,是的,因为在
mysql数据库中有插入,有时会使脚本运行超过 5 分钟。
标签: php linux bash concurrency cron