Heroku工作进程是如何工作的?

3
Heroku支持多种dyno配置,允许我们为应用程序设置webworker进程类型,例如像这样:
web: vendor/bin/heroku-php-apache2 web/
worker: php worker/myworker.php

Web Dyno 会处理 Web 流量,而 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命令行,这也可能解释了我的一些困惑。)

背景:我试图理解它们是如何工作的,这有助于我决定是否应该在Heroku上使用workerclock来自制邮件/通讯系统。

1个回答

1

也许您已经发现了,但对于正在寻找答案的任何人,这是我的经验:

  • 它们只在部署时运行一次吗?还是会重复运行(如果是,那么何时运行)?

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

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

没有,但请记住,所有的 dynos 每天都会重新启动一次。

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

可以的。我大多数的用途都涉及在循环中使用 sleep 后调用主要脚本函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接