在AppFog上运行PHP worker

时间:2012-11-27 23:21:06

标签: php cron background-process worker appfog

我搜索,搜索和搜索,但没有找到任何资源。

有没有办法在AppFog上的PHP应用中运行 worker

我只是根据这些语言的框架找到了运行Ruby,Node.js和Python worker的说明。

2 个答案:

答案 0 :(得分:30)

经过大量的修修补补,我找到了办法!

在你的php脚本中,你应该将超时限制设置为0,并且有一个无限循环,如:

<?php
    set_time_limit(0);

    while (true) {
        print "blah\n";
        sleep(120);
    }

此代码每2分钟打印一次“blah”。

要将此部署到AppFog,您必须使用af控制台命令。这里最重要的是当它询问这是否是一个PHP应用程序时说

步骤

    目录上的
  1. af push
  2. 如果猜测应用语言
  3. ,请说
  4. 选择独立作为应用类型。
  5. 现在选择PHP
  6. 输入php index.php或您为应用程序主文件指定的任何名称。
  7. 以下所示:

    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);
    }