Как работают работники Heroku?

Heroku поддерживает несколько типов конфигураций dyno и позволяет нам web и worker тип процесса для приложения, например, так:

web: vendor/bin/heroku-php-apache2 web/
worker: php worker/myworker.php

web Dyno будет обрабатывать веб-трафик, в то время как worker Тип dyno может использоваться в качестве фонового задания (например, для обработки очереди.)

Документы не разъяснили мне, как работают эти работники, а именно: как они начинаются? вести себя?

Особенно:

  • Они запускаются только один раз при развертывании? Или они запускаются неоднократно (если да, когда)?
  • У них есть максимальное время выполнения?
  • Можно ли использовать внутри них бесконечный цикл? Или мне их как-то вызвать?

Если я пойду на простой hello world:

myworker.php
<?php
error_log( "Hello world. This is the worker talking." );
?>

Затем (после развертывания или перезапуска) heroku logs --tail --ps worker показывает мне только это:

2017-08-31T17:46:55.353948+00:00 heroku[worker.1]: State changed from crashed to starting
2017-08-31T17:46:57.834203+00:00 heroku[worker.1]: Starting process with command `php worker/mailer.php`
2017-08-31T17:46:58.452281+00:00 heroku[worker.1]: State changed from starting to up
2017-08-31T17:46:59.782480+00:00 heroku[worker.1]: State changed from up to crashed
2017-08-31T17:46:59.773468+00:00 heroku[worker.1]: Process exited with status 0
2017-08-31T17:46:59.697976+00:00 app[worker.1]: Hello world. This is the worker talking.

Это ожидаемое поведение?

(Я не очень привык использовать PHP из командной строки, что, похоже, делают рабочие и могут объяснить некоторые мои заблуждения.)

Справочная информация: я пытаюсь понять, как они работают ради меня, но и чтобы помочь мне решить, следует ли мне использовать worker или clock для домашней системы рассылки / рассылки я адаптируюсь к Heroku.

1 ответ

Вы, наверное, уже узнали, но вот мой опыт для тех, кто ищет ответ:

  • Они запускаются только один раз при развертывании? Или они запускаются повторно (если да, то когда)?

Они будут работать после развертывания и будут работать до тех пор, пока не будет выдана команда выхода или если сценарий не вернет ошибку. По моему опыту, когда возникает ошибка, она немедленно прерывается и перезапускается через некоторое время (что кажется случайным). Я не уверен, перезапустится ли он после выполнения чистого выхода.

  • Есть ли у них максимальное время выполнения?

Нет. Но имейте в виду, что все динамометрические установки перезапускаются один раз в день.

  • Можно ли использовать внутри них бесконечный цикл? Или мне как-то их запускать?

Да. В большинстве случаев я использую цикл сна, за которым следует вызов основной функции скрипта.

Другие вопросы по тегам