Как работают работники 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 ответ
Вы, наверное, уже узнали, но вот мой опыт для тех, кто ищет ответ:
- Они запускаются только один раз при развертывании? Или они запускаются повторно (если да, то когда)?
Они будут работать после развертывания и будут работать до тех пор, пока не будет выдана команда выхода или если сценарий не вернет ошибку. По моему опыту, когда возникает ошибка, она немедленно прерывается и перезапускается через некоторое время (что кажется случайным). Я не уверен, перезапустится ли он после выполнения чистого выхода.
- Есть ли у них максимальное время выполнения?
Нет. Но имейте в виду, что все динамометрические установки перезапускаются один раз в день.
- Можно ли использовать внутри них бесконечный цикл? Или мне как-то их запускать?
Да. В большинстве случаев я использую цикл сна, за которым следует вызов основной функции скрипта.