

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Buildfile 和 Procfile
<a name="platforms-linux-extend.build-proc"></a>

某些平台可讓您自訂建置或準備應用程式的方式，以及指定執行應用程式的程序。每個單獨的平台主題都特別提到 *Buildfile* 和/或 *Procfile*，如果平台支援它們。在 [Elastic Beanstalk 平台](concepts-all-platforms.md) 下查詢您的特定平台。

對於所有支援的平台，語法和語意都是相同的，如本頁所述。個別的平台主題提到這些檔案的特定用法，以建置和執行各自語言的應用程式。

## Buildfile
<a name="platforms-linux-extend.build"></a>

若要為應用程式指定自訂建置和組態命令，請將名為 `Buildfile` 的檔案放在應用程式原始碼的根目錄中。檔案名稱區分大小寫。請將以下語法用於 `Buildfile`。

```
<process_name>: <command>
```

`Buildfile` 中的命令必須符合下列規則表達式：`^[A-Za-z0-9_-]+:\s*[^\s].*$`。

Elastic Beanstalk 不會監控透過 `Buildfile` 執行的應用程式。針對短期執行且須在任務完成後終止的命令，請使用 `Buildfile`。針對長期執行且不應退出的應用程式程序，請使用 [Procfile](#platforms-linux-extend.proc)。

`Buildfile` 內的所有路徑均相對於原始碼套件的根目錄。在下列 `Buildfile` 的範例中，`build.sh` 為位於原始碼套件根目錄的 Shell 指令碼。

**Example Buildfile**  

```
make: ./build.sh
```

若要提供自訂建置步驟，建議您將 `predeploy` 平台勾點用於除了最簡單的命令以外的任何項目，而不是使用 `Buildfile`。平台勾點允許使用更豐富的指令碼和更完善的錯誤處理方式。下節將說明平台勾點。

## Procfile
<a name="platforms-linux-extend.proc"></a>

若要指定可啟動和執行應用程式的自訂命令，請將名為 `Procfile` 的檔案放在應用程式原始碼的根目錄中。檔案名稱區分大小寫。請將以下語法用於 `Procfile`。您可以指定一或多個命令。

```
<process_name1>: <command1>
<process_name2>: <command2>
...
```

`Procfile` 中的每一行必須符合下列規則表達式：`^[A-Za-z0-9_-]+:\s*[^\s].*$`

針對長期執行且不應退出的應用程式程序，使用 `Procfile`。Elastic Beanstalk 預期 `Procfile` 執行的程序會持續執行。Elastic Beanstalk 會監控這些程序，並重新啟動終止的任何程序。若是短期執行的程序，請使用 [Buildfile](#platforms-linux-extend.build)。

`Procfile` 內的所有路徑均相對於原始碼套件的根目錄。以下範例 `Procfile` 定義了三個程序。第一個程序 (在此範例中稱為 `web`) 是*主要 Web 應用程式*。

**Example Procfile**  

```
web: bin/myserver
cache: bin/mycache
foo: bin/fooapp
```

Elastic Beanstalk 會將代理伺服器設定為將要求轉送至連接埠 5000 上的主要 Web 應用程式，而且您可以設定此連接埠號碼。`Procfile` 的常見用途是將此連接埠號碼作為命令引數傳遞給您的應用程式。如需代理組態的詳細資訊，請參閱 [反向代理組態](platforms-linux-extend.proxy.md)。

Elastic Beanstalk 會從日誌檔案中的 `Procfile` 程序擷取標準輸出和錯誤串流。Elastic Beanstalk 會在執行程序後，命名日誌檔案，並將其存放至 `/var/log`。例如，前述範例的 `web` 程序，會分別為 `web-1.log` 和 `web-1.error.log` 產生名為 `stdout` 和 `stderr` 的日誌。