AWS弹性beantalk上的预定http调用
Posted
技术标签:
【中文标题】AWS弹性beantalk上的预定http调用【英文标题】:scheduled http call on AWS elastic beanstalk 【发布时间】:2013-07-20 08:54:37 【问题描述】:我已经搜索了一段时间,并认为我有我需要的部分信息,但只是需要一些帮助才能将它们放在一起。
我想要实现的是定期调用 URL(codeigniter 控制器),例如每 5 分钟将通过我的数据库邮件队列并使用亚马逊 SES 发送邮件。
到目前为止,我已经成功创建了控制器、模型、数据库,并且 SES 工作正常。控制器一次发送 10 封电子邮件,当我手动点击 URL 时一切正常。
我对 cron 工作不太熟悉,但认为这是我需要去的地方。
我的应用程序设置在 AWS 上的 Elastic beanstalk 上。
我认为我的 Web 根目录中需要一个名为 .ebextensions
的文件夹,其中包含一个名为 something.config
的文件,我可以在其中放置一些“容器命令”。我还认为我需要在某处包含 'leader_only: true' 以避免我的复制实例执行相同的工作。
当我不明白我的容器命令应该是什么时,考虑到控制器是 'http://myapplication/process_mail
' ?从我看到的示例中,我看不出它是如何确定频率的,甚至是“调用”该 URL 的代码。
在我的控制器中,我以前有以下代码以确保它只能从命令行调用。这是我可以保留和拥有的东西,还是容器命令会像任何其他用户一样点击 URL?
if (!$this->input->is_cli_request())
echo "Access Denied";
return;
在此先感谢您的任何帮助。我想我只需要帮助了解配置文件中应该包含的内容,但是我可能又完全走错了路!
更新:
到目前为止,我已经做到了:
我相信我需要像这样从命令行运行应用程序http://ellislab.com/codeigniter/user-guide/general/cli.html
所以我的命令是php index.php process_mail
所以我真正需要的是帮助每 5 分钟运行一次这个命令。这是我目前所拥有的:
container_commands:
send_mail:
command: php index.php process_mail
leader_only: true
但我不明白我如何让它每 5 分钟运行一次,而不仅仅是在设置实例时运行。我是否需要在创建实例时创建一个 cron 作业文件,而不是在其中使用 php 命令?
更新 2:
对于遇到同样问题的其他人,我最后得到了这样的排序:
如下所示的 ebextensions 文件:(.ebextensions/mail_queue.config
)
container_commands:
01_send_mail:
command: "cat .ebextensions/process_mail.txt > /etc/cron.d/process_mail && chmod 644 /etc/cron.d/process_mail"
leader_only: true
在同一文件夹中名为 process_mail.txt 的文件如下所示:
# The newline at the end of this file is extremely important. Cron won't run without it.
*/5 * * * * root /usr/bin/php /var/app/current/index.php process_mail > /dev/null
因此,它每 5 分钟通过 cmd 行运行一次 codeigniter 主索引文件,并传入控制器名称。
感谢:https://***.com/a/15233848/2604392
【问题讨论】:
【参考方案1】:我会设置 cron 作业来与 url 对话,然后将结果存储在 mysql 数据库中。然后常规 PHP 或任何其他应用程序可以连接到 MySQL 并访问数据。这是几个月以来连接到 Twitter 的建议方式,因此您可以找到有关如何执行此流动搜索 Twitter 连接的信息。 希望这会有所帮助
顺便说一句,在编写生成电子邮件的 PHP 脚本时,我注意到我必须放慢电子邮件发送的速度以避免被标记为垃圾邮件发送者。我在电子邮件之间添加了 2 秒的延迟,它完成了工作。我的数据库只有 2500,所以没什么大不了的(除了要更改 PHP_MAXEXECUTION 时间变量)...
【讨论】:
抱歉,我认为这不是我要找的。这与 Twitter 甚至 MySQL 数据库无关,因为我只是想让弹性 beanstalk 定期运行一些代码。不过还是谢谢。以上是关于AWS弹性beantalk上的预定http调用的主要内容,如果未能解决你的问题,请参考以下文章
AWS 弹性 beantalk 上的 postgraphile 出现 408 超时错误
如何将自签名证书分配给 AWS 弹性 beantalk 应用程序