【问题标题】:Running PHP workers on AppFog在 AppFog 上运行 PHP 工作者
【发布时间】:2012-11-15 17:03:55
【问题描述】:

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

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

我只找到了基于这些语言的框架运行 Ruby、Node.js 和 Python 工作者的说明。

【问题讨论】:

    标签: php cron background-process worker appfog


    【解决方案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

      步骤

      1. 目录上的af push
      2. 如果它猜到您应用的语言,请说 no
      3. 选择独立版作为应用类型。
      4. 现在您选择 PHP
      5. 输入 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 上“执行”脚本以模拟并行进程吗?
      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多