Подтвердить что ты не робот

Запуск PHP-работников в AppFog

Я искал и искал и искал, но не нашел никаких ресурсов.

Есть ли способ запустить рабочего в приложении PHP в AppFog?

Я нашел инструкции для запуска Ruby, Node.js и рабочих Python на основе фреймворков этих языков.

4b9b3361

Ответ 1

После долгих возиться, я нашел способ!

В вашем php script вы должны установить лимит времени ожидания 0 и иметь бесконечный цикл, например:

<?php
    set_time_limit(0);

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

Этот код будет печатать "бла" каждые 2 минуты.

Чтобы развернуть это в AppFog, вы должны использовать консольную команду af. Самое главное здесь сказать нет, когда он спрашивает, есть ли это приложение PHP.

Шаги

  • af push в каталоге
  • скажите нет, если он угадывает язык вашего приложения
  • В качестве типа приложения выберите Автономный.
  • Теперь вы выбираете 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 даст вам результат работника, поэтому вы можете отлаживать и проверять, все ли в порядке.

Это, надеюсь, это поможет.

Ответ 2

Отличное решение. Я не могу комментировать из-за недостаточной репутации, поэтому я изменяю исходный ответ.

Чтобы включить PHP-псевдо-crontab для запуска с указанной секунды, используйте цикл принудительного управления в начале script, как показано ниже:

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