在 AppFog 上运行 PHP 工作者
Posted
技术标签:
【中文标题】在 AppFog 上运行 PHP 工作者【英文标题】:Running PHP workers on AppFog 【发布时间】:2012-11-15 17:03:55 【问题描述】:我搜索了又搜索了,但没有找到任何资源。
有没有办法在 AppFog 上的 php 应用程序中运行 worker?
我只找到了基于这些语言的框架运行 Ruby、Node.js 和 Python 工作者的说明。
【问题讨论】:
【参考方案1】:很好的解决方案。由于声誉不足,我无法发表评论,因此我正在修改原始答案。
要使 PHP 伪 crontab 在指定的秒数启动,请在脚本开头使用强制循环,如下所示:
<?php
set_time_limit(0);
// begin process at zero (00) second mark
$cnt=0;
while (true)
usleep(250000); // avoid excess looping
if ( date('s',time()) == '00' )
break;
if ( $cnt++ > 240 )
break; // something has gone wrong...
var_dump(date('s',time()));exit; // test/validate
while (true)
print "blah\n";
sleep(120);
【讨论】:
【参考方案2】:经过大量的修补,我找到了方法!
在你的 php 脚本中,你应该将超时限制设置为0
,并有一个无限循环,就像这样:
<?php
set_time_limit(0);
while (true)
print "blah\n";
sleep(120);
此代码将每 2 分钟打印一次“blah”。
要将其部署到 AppFog,您必须使用af
控制台命令。这里最重要的是当它询问这是否是 PHP 应用程序时说 no。
步骤
-
目录上的
af push
如果它猜到您应用的语言,请说 no
选择独立版作为应用类型。
现在您选择 PHP
输入 php index.php
或您为应用程序主文件指定的任何名称。
如下图所示:
D:\Users\Leonel\dev\app>af push
Would you like to deploy from the current directory? [Yn]:
Application Name: APP
Detected a PHP Application, is this correct? [Yn]: n
[...]
6: Standalone
[...]
Select Application Type: 6
Selected Standalone Application
[...]
5: php
[...]
Select Runtime: 5
Selected php
Start Command: php index.php
1: AWS US East - Virginia
[...]
Select Infrastructure: 1
Application Deployed URL [None]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [128M]:
How many instances? [1]:
Bind existing services to 'APP'? [yN]:
Create services to bind to 'APP'? [yN]:
Would you like to save this configuration? [yN]:
Creating Application: OK
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application 'APP': OK
Starting Application 'APP': OK
D:\Users\Leonel\dev\APP>af logs APP
====> /logs/stdout.log <====
blah
blah
一些注意事项
您需要创建一个单独的应用程序来执行后台任务,尽管此应用程序可以绑定到其他应用程序的相同服务(例如数据库),或者此应用程序可以curl
到您的其他应用程序,例如。只需确保它位于同一可用区即可。
af logs APP
会给你工人的输出,所以你可以调试并检查一切是否正常。
就是这样,希望对你有帮助。
【讨论】:
+1 好答案。您可能希望将其包装在 try catch 中并记录错误。 我们可以在 AppFog 上“执行”脚本以模拟并行进程吗?以上是关于在 AppFog 上运行 PHP 工作者的主要内容,如果未能解决你的问题,请参考以下文章
无法将我的本地 Wordpress 安装隧道传输到 appfog 上的 mysql 数据库
并行 PhoneGap 开发 - 适用于 iPhone 和 Android 的应用程序