

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

# 使用 OpsWorks Stacks Agent CLI
<a name="troubleshoot-debug-cli"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

**注意**  
代理 CLI 仅适用于 Linux 实例。

在每个在线实例上， OpsWorks Stacks 都会安装一个代理，该代理与服务进行通信。 OpsWorks Stacks 服务反过来向代理发送命令以执行任务，例如在生命周期事件发生时在实例上启动 Chef 运行。在 Linux 实例中，代理公开了一个对故障排除非常有用的命令行界面 (CLI)。要运行代理 CLI 命令，请使用 [SSH 连接到实例](workinginstances-ssh.md)。然后，您就可以运行代理 CLI 命令来执行各种任务，包括以下任务：
+ 执行配方。
+ 显示 Chef 日志。
+ 显示[堆栈配置和部署 JSON](workingcookbook-json.md)。

有关如何设置与实例的 SSH 连接的更多信息，请参阅[使用 SSH 登录](workinginstances-ssh.md)。您还必须拥有堆栈的 [SSH 和 Sudo 权限](opsworks-security-users.md)。

本部分介绍了如何使用代理 CLI 进行故障排除。有关更多信息和完整的命令参考，请参阅 [OpsWorks Stacks Agent CLI](agent.md)。

**Topics**
+ [执行配方](#troubleshoot-debug-cli-recipes)
+ [显示 Chef 日志](#troubleshoot-debug-cli-log)
+ [显示堆栈配置和部署 JSON](#troubleshoot-debug-cli-json)

## 执行配方
<a name="troubleshoot-debug-cli-recipes"></a>

代理 CLI [`run_command`](agent-run.md) 命令指示代理返回一个它之前执行过的命令。对故障排除最有用的命令为 `setup`、`configure`、`deploy` 和 `undeploy`，每个命令对应于一个生命周期事件。这些命令指示代理启动 Chef 运行以执行关联的配方。

**注意**  
`run_command` 命令仅限于执行与指定命令关联的配方组，通常是与生命周期事件关联的配方。您不能用它来执行特定的配方。要执行一个或多个指定的配方，请使用 [Execute Recipes 堆栈命令](workingstacks-commands.md)或等效的 CLI 或 API 操作（[https://docs.aws.amazon.com/cli/latest/reference/opsworks/create-deployment.html](https://docs.aws.amazon.com/cli/latest/reference/opsworks/create-deployment.html) 和 [https://docs.aws.amazon.com/opsworks/latest/APIReference/API_CreateDeployment.html](https://docs.aws.amazon.com/opsworks/latest/APIReference/API_CreateDeployment.html)）。

`run_command` 命令对调试自定义配方非常有用，尤其是分配到 Setup 和 Configure 生命周期事件的配方，您无法从控制台直接触发这些事件。通过使用 `run_command`，您可以随时依照您的需要来运行特定事件的配方，而无须启动或停止实例。

**注意**  
OpsWorks Stacks 从实例的食谱缓存中运行食谱，而不是食谱存储库。 OpsWorks 实例启动时，Stacks 会将食谱下载到此缓存中，但如果您随后修改食谱，则不会自动更新在线实例上的缓存。如果您在实例启动后修改了您的说明书，请确保运行 [Update Cookbooks 堆栈命令](workingstacks-commands.md)以使用存储库中最新版本更新说明书缓存。

代理仅缓存最近的命令。您可以通过运行 [`list_commands`](agent-list.md) 列出这些命令，它会返回一个包含已缓存的命令和命令执行时间的列表。

```
sudo opsworks-agent-cli list_commands
2013-02-26T19:08:26        setup
2013-02-26T19:12:01        configure
2013-02-26T19:12:05        configure
2013-02-26T19:22:12        deploy
```

要重新运行最近的命令，请运行：

```
sudo opsworks-agent-cli run_command
```

要重新运行最近实例的指定命令，请运行：

```
sudo opsworks-agent-cli run_command command
```

例如，要重新运行 Setup 配方，您可以运行以下命令：

```
sudo opsworks-agent-cli run_command setup
```

每个命令都有一个关联的[堆栈配置和部署 JSON](workingcookbook-json.md)，表示该命令运行时堆栈和部署的状态。由于这些数据可能会因命令而异，因此，较早实例的命令与最近的命令可能使用略微不同的数据。要重新运行特定实例的命令，请复制 `list_commands` 输出中的时间，并运行以下命令：

```
sudo opsworks-agent-cli run_command time
```

前面的示例均使用默认的 JSON 重新运行命令，即为该命令安装的 JSON。您可以使用任意 JSON 文件重新运行命令，如下所示：

```
sudo opsworks-agent-cli run_command -f /path/to/valid/json.file
```

## 显示 Chef 日志
<a name="troubleshoot-debug-cli-log"></a>

代理 CLI [`show_log`](agent-show.md) 命令显示一个指定的日志。在该命令执行完毕后，您将看到文件结尾。因此，`show_log` 命令提供了一种查看日志结尾的简便方法，您通常会在这里找到错误信息。您可以向上滚动以查看日志的前面部分。

要显示当前命令的日志，请运行以下命令：

```
sudo opsworks-agent-cli show_log
```

您也可以显示特定命令的日志，但请注意，代理仅缓存最后 30 个命令的日志。您可以通过运行 [`list_commands`](agent-list.md)，列出某个实例的命令，该命令返回一个包含已缓存的命令和命令执行时间的列表。有关示例，请参阅[执行配方](#troubleshoot-debug-cli-recipes)。

要显示特定命令最近执行情况的日志，请运行以下命令：

```
sudo opsworks-agent-cli show_log command
```

该命令参数可设置为 `setup`、`configure`、`deploy`、`undeploy`、`start`、`stop` 或 `restart`。大多数这些命令对应于生命周期事件，指示代理运行关联的配方。

要显示特定命令执行情况的日志，请复制 `list_commands` 输出中的日期并运行：

```
sudo opsworks-agent-cli show_log date
```

如果命令仍在执行中，`show_log` 会显示日志的当前状态。

**注意**  
解决错误和 out-of-memory问题的一种方法是在执行期间跟踪日志，如下所示：`show_log`  
使用 `run_command` 来触发相应的生命周期事件。有关更多信息，请参阅 [执行配方](#troubleshoot-debug-cli-recipes)。
重复运行 `show_log` 以在日志写入时查看日志的结尾部分。
如果 Chef 运行的内存不足或意外退出，则日志将突然结束。如果配方失败，则日志的结尾将包含一个异常信息和堆栈跟踪。

## 显示堆栈配置和部署 JSON
<a name="troubleshoot-debug-cli-json"></a>

配方使用的大部分数据来自[堆栈配置和部署 JSON](workingcookbook-json.md)，它定义了一组 Chef 属性，提供堆栈配置、任何部署和用户可添加的可选自定义属性的详细描述。对于每个命令， OpsWorks Stacks 都会安装一个 JSON，该JSON表示命令执行时的堆栈和部署状态。有关更多信息，请参阅 [堆栈配置和部署属性](workingcookbook-json.md)。

如果您的自定义配方从堆栈配置和部署 JSON 中获取数据，您可以通过检查该 JSON 来验证数据。显示堆栈配置和部署 JSON 最简单的方式是运行代理 CLI [`get_json`](agent-json.md) 命令，该命令将显示格式化版本的 JSON 对象。下面显示了某些典型输出的前几行内容：

```
{
  "opsworks": {
    "layers": {
      "php-app": {
        "id": "4a2a56c8-f909-4b39-81f8-556536d20648",
        "instances": {
          "php-app2": {
            "elastic_ip": null,
            "region": "us-west-2",
            "booted_at": "2013-02-26T20:41:10+00:00",
            "ip": "10.112.235.192",
            "aws_instance_id": "i-34037f06",
            "availability_zone": "us-west-2a",
            "instance_type": "c1.medium",
            "private_dns_name": "ip-10-252-0-203.us-west-2.compute.internal",
            "private_ip": "10.252.0.203",
            "created_at": "2013-02-26T20:39:39+00:00",
            "status": "online",
            "backends": 8,
            "public_dns_name": "ec2-10-112-235-192.us-west-2.compute.amazonaws.com"
...
```

您可以显示最近的堆栈配置和部署 JSON，如下所示：

```
sudo opsworks-agent-cli get_json
```

通过执行以下命令，您可以显示特定命令最近的堆栈配置和部署 JSON：

```
sudo opsworks-agent-cli get_json command
```

该命令参数可设置为 `setup`、`configure`、`deploy`、`undeploy`、`start`、`stop` 或 `restart`。大多数这些命令对应于生命周期事件，指示代理运行关联的配方。

通过指定命令的日期，您可以显示特定命令执行的堆栈配置和部署 JSON，如下所示：

```
sudo opsworks-agent-cli get_json date
```

使用此命令的最简单方法如下所示：

1. 运行 `list_commands`，该命令会返回一个列表，其中包含已在实例上运行的命令以及每个命令的运行日期。

1. 复制相应命令的日期并将其用作`get_json`*date*参数。