我搜索,搜索和搜索,但没有找到任何资源。
有没有办法在AppFog上的PHP应用中运行 worker ?
我只是根据这些语言的框架找到了运行Ruby,Node.js和Python worker的说明。
答案 0 :(得分:30)
经过大量的修修补补,我找到了办法!
在你的php脚本中,你应该将超时限制设置为0
,并且有一个无限循环,如:
<?php
set_time_limit(0);
while (true) {
print "blah\n";
sleep(120);
}
此代码每2分钟打印一次“blah”。
要将此部署到AppFog,您必须使用af
控制台命令。这里最重要的是当它询问这是否是一个PHP应用程序时说否。
af push
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 :(得分: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);
}