Heroku支持多种dyno配置,允许我们为应用程序设置
web
和worker
进程类型,例如像这样: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上使用worker
或clock
来自制邮件/通讯系统。