运行监控MySQL的"无休止"过程的最佳方法?

sam*_*sam 1 php database theory

我有一个必须针对某些事情运行的进程,并且不适合在用户端运行(处理时间超过15秒)所以我考虑使用cron作业但是再次,这也不合适,因为它会创建回来的日志.我已经缩小了我的选择,要么运行一个监视mysql更改的无限进程,要么在检测到更改时配置mysql来触发脚本,但后者不是我想要进入的东西,除非它是我唯一的选择,这让我失望"无尽的"监控选项.

我正在考虑使用PHP的那种东西是:

while (true) {
  $db->query('SELECT * FROM database');
  while($row = $db->fetch_assoc()){
    // do the stuff here
  }
  sleep(5);
}
Run Code Online (Sandbox Code Playgroud)

然后通过命令行运行它.现在这在理论上是合理的,实际上它并没有像我希望的那样好,使用的资源超出了我的预期(但不是超出我的范围,只是不是我的最佳目标).所以我的问题如下:

  1. PHP是错误的语言吗?PHP是我的工作,但我知道有时候这是错误的选择,我想也许这是.如果是,我应该使用什么语言?

  2. 有没有更好的方法,我没有考虑过,这不是我列出的任何想法?

  3. 如果PHP是正确的选项,我如何优化我发布的代码,是否有一种方法比每次完成操作后休眠5秒更好?

提前致谢!我对任何想法持开放态度,只要它们在那里不太远,我正在自由运行我自己的服务器,所以对我能做的事情没有理论上的限制.

Ram*_*mon 6

我建议将循环移到shell脚本中,然后为每次迭代执行一个新的PHP进程.这样PHP就永远不会使用无限制的资源(即使某处存在内存/连接泄漏),因为每次迭代都会终止进程.像下面这样的东西应该没问题(Bash):

while true; do
  php /path/to/your/script.php 2>&1 | logger ...(logger options) 
  sleep 5
done
Run Code Online (Sandbox Code Playgroud)

我发现这种方法对于PHP中长时间运行的脚本来说更加健壮,可能是因为这与PHP作为CGI脚本运行时的运行方式非常相似.