如何防止PHP脚本多次运行?

目前,我试图阻止onlytask.php脚本多次运行:

$fp = fopen("/tmp/"."onlyme.lock", "a+");

if (flock($fp, LOCK_EX | LOCK_NB)) {

echo "task started\n";

//

while (true) {

// do something lengthy

sleep(10);

}

//

flock($fp, LOCK_UN);

} else {

echo "task already running\n";

}

fclose($fp);

并且有一个cron作业每分钟执行一次以上脚本:

* * * * * php /usr/local/src/onlytask.php

它可以工作一段时间。几天后,当我这样做时:

ps auxwww | grep onlytask

我发现有 两个 实例正在运行!不是三个或更多,不是一个。我杀死了其中一个实例。几天后,又有 两个 实例。

代码有什么问题?还有其他替代方法来限制onlytask.php的一个实例正在运行吗?

PS我的/tmp/文件夹没有清理。ls -al /tmp/*.lock显示锁定文件是在第一天创建的:

-rw-r--r--  1 root root    0 Dec  4 04:03 onlyme.lock

回答:

现在,我检查进程是否正在运行,ps并通过一个bash脚本扭曲php 脚本:

 #!/bin/bash

PIDS=`ps aux | grep onlytask.php | grep -v grep`

if [ -z "$PIDS" ]; then

echo "Starting onlytask.php ..."

php /usr/local/src/onlytask.php >> /var/log/onlytask.log &

else

echo "onlytask.php already running."

fi

并每分钟运行一次bash脚本cron

以上是 如何防止PHP脚本多次运行? 的全部内容, 来源链接: utcz.com/qa/420513.html

回到顶部