我一直在寻找一段时间,并认为我有一些我需要的信息,但只是需要一些帮助将它们放在一起。
我想要实现的是定期调用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;
}
提前感谢任何帮助。我想我只需要配置文件中的内容需要帮助,但是我可能会完全走错了路径!
到目前为止,我已经达到了这个目标:
我相信我需要从命令行运行应用程序,例如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命令?
对于遇到同样问题的其他人,我最终将其排序为:
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主索引文件,传入控制器名称。
答案 0 :(得分:-1)
我会设置cron作业与url对话,然后将结果存储在MySQL数据库中。然后常规PHP或任何其他应用程序可以连接到MySQL并访问数据。这是几个月以来连接到Twitter的建议方式,因此您可以找到有关如何进行Twitter连接搜索的信息。 希望这有帮助
顺便说一句,在编写生成PHP脚本的电子邮件时,我注意到我必须放慢电子邮件发送的速度,以免被标记为垃圾邮件发送者。我在电子邮件之间添加了2秒的延迟,它完成了这项工作。我的数据库只有2500,所以没什么大不了的(除了注意更改PHP_MAXEXECUTION时间变量)...