如何让Amazon SQS PHP Receiver脚本永远运行?

如何让Amazon SQS PHP Receiver脚本永远运行?,php,amazon-web-services,amazon-sqs,supervisord,Php,Amazon Web Services,Amazon Sqs,Supervisord,我以前曾与主管一起使用Gearman来管理工作 在本例中,我们使用的是AmazonSQS,我花了一些时间试图了解它 我已经从我们的主Web服务器中设置了一个单独的微实例,用作图像处理服务器(目前仅用于测试,它将升级并成为集群的一部分,然后再实施) 在这个微型实例上,我安装了PHP和ImageMagick以执行图像处理 我还编写了一个worker脚本,用于接收来自AmazonSQS的消息 所有的工作都很完美,但是我需要这个脚本一次又一次地运行,以便不断地检查消息 我不喜欢运行连续循环的想法,因此我

我以前曾与主管一起使用Gearman来管理工作

在本例中,我们使用的是AmazonSQS,我花了一些时间试图了解它

我已经从我们的主Web服务器中设置了一个单独的微实例,用作图像处理服务器(目前仅用于测试,它将升级并成为集群的一部分,然后再实施)

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

我还编写了一个worker脚本,用于接收来自AmazonSQS的消息

所有的工作都很完美,但是我需要这个脚本一次又一次地运行,以便不断地检查消息

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

所以我的问题是,通常认为什么是实现这一点的最佳实践方式

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

我有使用supervisor(确保gearman workers保持运行)的经验,我想知道我是否可以简单地使用它反复执行简单的php脚本

我的想法如下:

  • 设置SQS长轮询,以便脚本检查20秒
  • 使用一个20秒睡眠的while循环,让这个脚本一次运行一个小时
  • 把这些都交给主管。当时间到了,循环完成时,允许脚本退出
  • 然后,主管应自动重新启动它
这听起来可行吗?有更好的办法吗?在PHP中接收SQS消息的最佳实践通常是什么


提前感谢

supervisord
中,您可以将
autorestart
设置为
true
,让它反复运行您的命令。见:

总的来说,使用无止境的while循环是非常好的,PHP将正确地释放对象,并在正确编写的情况下检查内存。它可以运行数年而不泄漏(如果有泄漏,可能是您自己创建的,所以请检查您的代码)

你可能感兴趣;OP有一个类似的设置,带有自动重启功能,并希望为其添加优雅的关机功能