Heroku工作者如何工作?

时间:2017-08-31 17:56:01

标签: php heroku message-queue worker

Heroku支持多种类型的dyno配置,并允许我们为应用设置webworker流程类型,例如:

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

web dyno将处理网络流量,同时可以使用worker dyno类型as a background job (e.g.: to process a queue.)

文件并没有向我表明这些工人如何运作,即:他们是如何开始的?表现吗

特别是:

  • 他们在部署时只运行一次吗?或者它们是否反复运行(如果是这样的话)?
  • 他们是否有最长执行时间?
  • 可以在其中使用无限循环吗?或者我应该以某种方式触发它们?

如果我选择一个简单的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,这正是工作人员似乎正在做的事情,可能会解释我的一些困惑。)

背景:我正试图了解它们是如何工作的,但也是为了帮助我决定是否应该使用workerclock作为自制的邮件/通讯系统我我正在适应Heroku。

1 个答案:

答案 0 :(得分:0)

您可能已经知道了,但这是我为寻找答案的人提供的经验:

  • 它们在部署时只运行一次吗?或者它们是否重复运行(如果是,何时)?

它们将在部署后运行并继续运行,除非发出退出命令或脚本返回错误。根据我的经验,当发生错误时,它会立即中断并在一段时间后重新启动(这似乎是随机的)。我不确定它是否会在执行干净退出时重新启动。

  • 他们是否有最长执行时间?

没有。但请记住,所有测功机每天都会重新启动一次。

  • 在它们内部使用无限循环可以吗?或者我应该以某种方式触发它们?

是的。我的大部分使用涉及睡眠循环,然后调用主脚本函数。