【发布时间】:2019-01-18 01:37:38
【问题描述】:
我见过很多使用“锁定”文件来跟踪 PHP 脚本当前是否正在运行的示例。
例子:
- 脚本开始
- 检查“/tmp/lockfile”当前是否被锁定
- 如果已锁定,请退出。如果没有,请锁定文件并继续
这样,如果一个长时间运行的脚本启动了两次,那么只有第一个实例会运行。太棒了。
但是,绕过它似乎是错误的方法。我们为什么不直接检查进程是否已经像这样运行?
if(exec("ps -C " . basename(__FILE__) . " --no-headers | wc -l") > 1){
echo "Already running.";
exit;
}
这种方法有什么潜在的缺陷吗?为什么我经常看到“锁定”文件解决方法?用我们正在寻找的名称来计算进程似乎更准确....
【问题讨论】:
-
可能是因为在不了解 Bash 等知识的情况下,可以在纯 PHP 中检查锁定文件...
-
取决于您的主机,您可能无法运行 exec
-
我认为您可能会考虑编辑您的问题...这绝对适用于比 PHP 更广泛的一般实践。
-
因为
ps只适用于linux,flock 也适用于windows -
是的,许多 Windows 服务器不支持 Bash
标签: php command-line-interface daemon