3

我以前使用 Gearman 和 supervisor 来管理工作。

在这种情况下,我们使用的是 Amazon SQS,我花了一些时间试图弄清楚。

我已经从我们的主网络服务器设置了一个单独的微实例,用作图像处理服务器(目前纯粹是为了测试,它将在此实现上线之前升级并成为集群的一部分)

在这个微型实例上,我安装了 PHP 和 ImageMagick 以执行图像处理。

我还编写了一个从 Amazon SQS 接收消息的工作脚本。

一切正常,但是我需要这个脚本一遍又一遍地运行,以便不断检查消息。

我不喜欢运行连续循环的想法,因此开始研究其他方法,但收效甚微。

所以我的问题是什么通常被认为是做到这一点的最佳实践方式?

我担心内存问题,因为 PHP 并不是真正为此设计的,因此感觉就像运行脚本一段时间,然后停止并重新启动它可能是我最好的选择。

我有使用主管的经验(以确保齿轮工工作人员继续运行)并且想知道我是否可以简单地使用它来一遍又一遍地连续执行简单的 php 脚本?

我的想法如下:

  • 设置 SQS 长轮询,以便脚本检查 20 秒。
  • 使用带有 20 秒睡眠的 while 循环来保持此脚本一次运行一个小时
  • 让所有这些都通过主管运行。当时间到了并且循环完成时,允许脚本退出。
  • 然后主管应该自动重新启动它

这听起来可行吗?有没有更好的办法?通常认为在 PHP 中接收 SQS 消息的最佳实践是什么?

提前致谢

4

1 回答 1

1

supervisord你可以设置autorestart让它true一遍又一遍地运行你的命令。请参阅:http ://supervisord.org/configuration.html#program-x-section-settings

总体而言,使用无限的 while 循环非常好,PHP 将正确释放您的对象并检查是否正确写入内存。它可以运行多年而不会泄漏(如果有泄漏,您可能自己创建了它,因此请检查您的代码)。

如何在不终止其控制的程序的情况下停止 Supervisord 进程?您可能会感兴趣;OP 具有类似的设置,具有自动重启功能,并希望为其添加优雅的关闭功能。

于 2013-11-30T11:17:22.723 回答