How do Heroku workers work ?

江枫思渺然 提交于 2019-12-12 14:46:05

问题


Heroku supports multiple types of dyno configurations and allows us to set both a web and a worker process type for an app, for example like so:

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

The web dyno will handle the web traffic, meanwhile the worker dyno type can be used as a background job (e.g.: to process a queue.)

The docs didn't make it clear to me how these workers function, i.e.: how do they start? behave?

In particular:

  • Are they run just once at deployment? Or are they run repeatedly (if so when)?
  • Do they have a maximum execution time?
  • Is it okay to use an endless loop inside of them? Or should I trigger them somehow?

If I go for a simple hello world:

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

Then (after deploy or restart) heroku logs --tail --ps worker shows me only this:

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.

Is it the expected behavior?

(I'm not very used to using PHP from the command-line, which is what workers seem to be doing and might explain some of my confusion.)

Background: I'm trying to understand how they work for my own sake, but also to help me decide whether I should use a worker or a clock for a homemade mailing/newsletter system I'm adapting to Heroku.

来源:https://stackoverflow.com/questions/45987488/how-do-heroku-workers-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!