【问题标题】:How do Heroku workers work ?Heroku 工作人员如何工作?
【发布时间】:2018-02-09 18:23:17
【问题描述】:

Heroku 支持多种类型的测功机配置,并允许我们为应用设置 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。

【问题讨论】:

    标签: php heroku message-queue worker


    【解决方案1】:

    您可能已经知道了,但对于任何寻求答案的人来说,以下是我的经验:

    • 它们在部署时是否只运行一次?或者它们是否重复运行(如果有的话)?

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

    • 它们有最长执行时间吗?

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2016-09-11
      • 2012-04-24
      • 1970-01-01
      • 2015-07-04
      • 2018-11-05
      相关资源
      最近更新 更多