【问题标题】:How can I keep an Amazon SQS PHP reciever script running forever?如何让 Amazon SQS PHP 接收器脚本永远运行?
【发布时间】:2013-11-04 21:29:05
【问题描述】:

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

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

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

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

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

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

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

所以我的问题是,通常认为最佳做法是什么?

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

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

我的想法如下:

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

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

提前致谢

【问题讨论】:

    标签: php amazon-web-services amazon-sqs supervisord


    【解决方案1】:

    supervisord 中,您可以将autorestart 设置为true,让它一遍又一遍地运行您的命令。见:http://supervisord.org/configuration.html#program-x-section-settings

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

    How do I stop a Supervisord process without killing the program it's controlling? 您可能会感兴趣; OP 有类似的设置,具有自动重启功能,并希望为其添加正常关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2013-12-08
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多