如何防止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