

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Procfile 配置应用程序进程
<a name="java-se-procfile"></a>

如果您的应用程序源包根目录中有多个 JAR 文件，则必须包括 `Procfile` 文件来告知 Elastic Beanstalk 运行哪个或哪些 JAR。也可以为单 JAR 应用程序提供 `Procfile` 文件，以配置运行您的应用程序的 Java 虚拟机 (JVM)。

我们建议您始终在源包中将 `Procfile` 与应用程序一起提供。通过这种方式，您可以精确控制 Elastic Beanstalk 为您的应用程序运行的进程以及这些进程接收的参数。

有关编写和使用 `Procfile` 的详细信息，请参阅 [Buildfile 和 Procfile](platforms-linux-extend.build-proc.md)。

**Example Procfile**  

```
web: java -Xms256m -jar server.jar 
cache: java -jar mycache.jar
web_foo: java -jar other.jar
```

运行应用程序中的主 JAR 的命令必须命名为 `web`，而且必须是 `Procfile` 中列出的第一条命令。nginx 服务器将它从您的环境的负载均衡器接收到的所有 HTTP 请求都转发给此应用程序。

Elastic Beanstalk 假定 Procfile 中的所有条目应始终运行，并自动重新启动 Procfile 中定义的任何终止的应用程序。要运行将会终止并且不应重新启动的命令，请使用 [`Buildfile`](java-se-buildfile.md)。

## 在 Amazon Linux AMI（在 Amazon Linux 2 之前）上使用 Procfile
<a name="java-se-procfile.alami"></a>

如果您的 Elastic Beanstalk Java SE 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请阅读本节中的其他信息。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/ AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### 端口传递 — 亚马逊 Linux AMI (AL1)
<a name="java-se-procfile.alami.ports"></a>

默认情况下，Elastic Beanstalk 将 nginx 代理配置为通过端口 5000 向您的应用程序转发请求。您可以覆盖默认端口，方法是将 `PORT` [环境属性](java-se-platform.md#java-se-options)设置为主应用程序侦听的端口。

如果您使用 `Procfile` 运行多个应用程序，则 Amazon Linux AMI 平台版本上的 Elastic Beanstalk 预计每个额外的应用程序都侦听编号比上一个高 100 的端口。Elastic Beanstalk 将可从每个应用程序内访问的 PORT 变量设置为它预计该应用程序运行时使用的端口。您可以通过在应用程序代码中调用 `System.getenv("PORT")` 访问此变量。

在上面的 `Procfile` 示例中，`web` 应用程序侦听端口 5000，`cache` 侦听端口 5100，而 `web_foo` 侦听端口 5200。`web` 通过读取 `PORT` 变量配置其侦听端口，并在该端口号的基础上加 100 来确定 `cache` 侦听的端口，从而能够发送其请求。