防止同一php脚本的多个实例

时间:2018-07-16 14:02:19

标签: php linux bash ubuntu-16.04

我正在使用rc.local在ubuntu 16.04 virtua计算机启动时执行以下bash脚本。

#!/bin/bash
# Loop forever (until break is issued)
(while true; do

   sudo php /var/www/has/index.php external communication

done ) &

如您所见,bash连续执行php脚本。随着时间的流逝,脚本可能需要更长的时间才能执行。有时,即使正在运行同一脚本的另一个实例,上述脚本仍会继续启动。因此,我想知道如果存在实例,如何阻止php脚本的新实例执行?

1 个答案:

答案 0 :(得分:3)

您可以使用文件锁定来获取排他锁定。如果存在该锁,则可以结束脚本或等待直到释放该锁。

我建议您阅读http://php.net/manual/en/function.flock.php

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    // Execute logic
} else {
    echo "Couldn't get the lock!";
}