我有一个必须针对某些事情运行的进程,它不适合在用户端运行(处理时间超过 15 秒),所以我考虑使用 cron 作业,但同样,这也不合适,因为它将创建一个积压日志。我已经缩小了我的选择范围,要么运行一个无休止的进程来监视 mysql 的变化,要么配置 mysql 在检测到变化时触发脚本,但后者不是我想要进入的,除非它是我唯一的选择,这让我使用“无尽”监控选项。
我正在考虑使用 PHP 的事情是:
while (true) {
$db->query('SELECT * FROM database');
while($row = $db->fetch_assoc()){
// do the stuff here
}
sleep(5);
}
然后通过命令行运行它。现在这理论上听起来但在实践中它并没有像我希望的那样好,使用的资源比我预期的要多(但不超出我的范围,只是不我的最佳目标是什么)。所以我的问题如下:
PHP 是否是执行此操作的错误语言? PHP 是我工作的对象,但我知道有时候它是错误的选择,我想也许这就是错误的选择。如果是,我应该使用什么语言?
有没有更好的方法我没有考虑过并且我没有列出任何想法?
如果 PHP 是正确的选项,我如何优化我发布的代码,有没有比每次完成操作后休眠 5 秒更好的方法?
提前致谢!我对任何想法都持开放态度,只要它们不太远,我正在自由支配地运行自己的服务器,因此理论上我能做的事情没有限制。
最佳答案
我建议将循环移出到 shell 脚本中,然后为每次迭代执行一个新的 PHP 进程。这样 PHP 将永远不会使用无限资源(即使某处存在内存/连接泄漏),因为进程在每次迭代时终止。像下面这样的东西应该没问题(Bash):
while true; do
php /path/to/your/script.php 2>&1 | logger ...(logger options)
sleep 5
done
我发现这种方法对于 PHP 中长时间运行的脚本更为稳健,可能是因为这与 PHP 作为 CGI 脚本运行时的运行方式非常相似。
关于php - 运行 "endless"进程监控 MySQL 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592796/