1

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

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

到目前为止,我已经成功创建了控制器、模型、数据库,并且 SES 工作得很好。控制器一次发送 10 封电子邮件,当我手动点击 URL 时一切正常。

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

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

我认为我需要.ebextensions在我的 web 根目录中调用一个文件夹,其中包含一个文件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 ://stackoverflow.com/a/15233848/2604392

4

1 回答 1

-1

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

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

于 2013-07-21T15:12:32.393 回答