AWS弹性beanstalk上的预定http调用

时间:2013-07-21 15:08:58

标签: codeigniter amazon-web-services cron elastic-beanstalk

我一直在寻找一段时间,并认为我有一些我需要的信息,但只是需要一些帮助将它们放在一起。

我想要实现的是定期调用URL(codeigniter控制器),例如每5分钟将通过我的数据库邮件队列并使用亚马逊SES发送邮件。

到目前为止,我已经成功创建了控制器,型号,DB和SES工作正常。控制器一次发送10封电子邮件,当我手动点击URL时,一切正常。

我对cron的工作并不太熟悉,但我认为这是我需要去的地方。

我的应用程序是在AWS上的Elastic beanstalk上设置的。

我认为我的网络根目录中需要一个名为.ebextensions的文件夹,其中包含一个名为something.config的文件,我可以在其中放置一些“容器命令”。我还认为我需要在某处包含'leader_only:true'以避免我的复制实例执行相同的工作。

当我不明白我的容器命令应该是什么时,考虑到控制器是'http://myapplication/process_mail'?从我看到的例子中我看不出它如何确定频率,甚至是“调用”URL的代码。

在我的控制器中,我之前有以下代码,以确保只能从命令行调用它。这是我可以保留和拥有的东西,或者容器命令是否会像任何其他用户一样点击URL?

if (!$this->input->is_cli_request()) {
            echo "Access Denied";
            return;
        }

提前感谢任何帮助。我想我只需要配置文件中的内容需要帮助,但是我可能会完全走错了路径!

UPDATE:

到目前为止,我已经达到了这个目标:

我相信我需要从命令行运行应用程序,例如http://ellislab.com/codeigniter/user-guide/general/cli.html

所以我的命令是php index.php process_mail

所以我真正需要的是帮助运行这个命令evey 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://stackoverflow.com/a/15233848/2604392

1 个答案:

答案 0 :(得分:-1)

我会设置cron作业与url对话,然后将结果存储在MySQL数据库中。然后常规PHP或任何其他应用程序可以连接到MySQL并访问数据。这是几个月以来连接到Twitter的建议方式,因此您可以找到有关如何进行Twitter连接搜索的信息。 希望这有帮助

顺便说一句,在编写生成PHP脚本的电子邮件时,我注意到我必须放慢电子邮件发送的速度,以免被标记为垃圾邮件发送者。我在电子邮件之间添加了2秒的延迟,它完成了这项工作。我的数据库只有2500,所以没什么大不了的(除了注意更改PHP_MAXEXECUTION时间变量)...