【发布时间】:2014-02-07 18:14:12
【问题描述】:
我有一个在共享托管环境服务器上运行的 PHP 脚本。这个 PHP 脚本需要很长时间才能运行。完成一次跑步可能需要 20 到 30 分钟。这是一个反复出现的后台进程。但是我无法控制进程何时开始(它可能每五分钟触发一次,或者每三个小时触发一次,没人知道)。
无论如何,在这个脚本的开头我想检测之前的进程是否还在运行,如果之前的运行还在运行并且还没有完成,那么我就不会再运行这个脚本了。如果它没有运行,那么我运行新进程。
换句话说,这里是一个伪代码。我们把脚本叫做 abc.php
1. Start script abc.php
2. Check if an older version of abc.phh is still running. If it is running, then terminate
3. If it is not running, then continue with abc.php and do your work which might take 30 minutes or more
我该怎么做?请记住,这是共享主机。
更新:我正在考虑使用数据库检测机制。因此,当脚本启动时,它将在 DB 中设置一个值作为“STARTED=TRUE”,完成后,它将设置“STARTED=FALSE”。然而这个解决方案是不合适的,因为没有保证脚本会正确终止。它可能会被中断,因此可能不会将 STARTED 值更新为 FALSE。所以数据库解决方案是不可能的。它必须是某种过程检测,或者可能是我没有想到的不同解决方案。谢谢。
【问题讨论】:
-
你在运行 Linux 吗?
-
您可以创建一个锁定文件,例如scriptname.lock 到您的脚本在脚本开头运行的目录并在最后删除它。在此之后,您可以检查文件是否在开头是否存在,如果它确实会死掉脚本
-
我是否正确理解这是一个 CLI 进程?
-
@engvrdr 这比不可接受的数据库标志方法好多少?
-
@sirago 开发是 Windows XAMPP。生产服务器是 Linux。
标签: php process shared-hosting