

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

# 故障排除 AWS IoT Greengrass V2
<a name="troubleshooting"></a>

使用本节中的故障排除信息和解决方案来帮助解决问题 AWS IoT Greengrass Version 2。

**Topics**
+ [查看 AWS IoT Greengrass 核心软件和组件日志](#troubleshoot-with-logs)
+ [AWS IoT Greengrass 核心软件问题](#greengrass-core-issues)
+ [AWS IoT Greengrass 云问题](#greengrass-cloud-issues)
+ [核心设备部署问题](#greengrass-core-deployment-issues)
+ [核心设备组件问题](#greengrass-core-component-issues)
+ [核心设备 Lambda 函数组件问题](#greengrass-core-lambda-function-issues)
+ [组件版本已停用](#discontinued-component-version)
+ [Greengrass 命令行界面问题](#greengrass-cli-issues)
+ [AWS Command Line Interface 问题](#aws-cli-issues)
+ [详细的部署错误代码](troubleshooting-deployment.md)
+ [详细的组件状态代码](troubleshooting-component.md)

## 查看 AWS IoT Greengrass 核心软件和组件日志
<a name="troubleshoot-with-logs"></a>

 AWS IoT Greengrass Core 软件将日志写入本地文件系统，您可以使用该文件系统查看有关核心设备的实时信息。您还可以将核心设备配置为将日志写入日 CloudWatch 志，这样您就可以远程排除核心设备的故障。这些日志可以帮助您识别组件、部署和核心设备的问题。有关更多信息，请参阅 [监控 AWS IoT Greengrass 日志](monitor-logs.md)。

## AWS IoT Greengrass 核心软件问题
<a name="greengrass-core-issues"></a>

对 AWS IoT Greengrass 核心软件问题进行故障排除。

**Topics**
+ [ThrottlingException 来自 ListDeployments API](#ThrottlingException)
+ [无法设置核心设备](#unable-to-set-up-core-device)
+ [无法将 AWS IoT Greengrass Core 软件作为系统服务启动](#unable-to-start-system-service)
+ [无法将 Nucleus 设置为系统服务](#unable-to-set-up-system-service)
+ [无法连接到 AWS IoT Core](#core-error-unable-to-connect-to-aws-iot)
+ [内存不足错误](#java-out-of-memory)
+ [无法安装 Greengrass CLI](#unable-to-install-greengrass-cli)
+ [User root is not allowed to execute](#user-not-allowed-to-execute)
+ [com.aws.greengrass.lifecyclemanager.GenericExternalService: Could not determine user/group to run with](#missing-default-run-with-user)
+ [Failed to map segment from shared object: operation not permitted](#tmp-folder-noexec)
+ [Windows 服务设置失败](#failed-to-set-up-windows-service)
+ [com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager](#failed-to-get-trust-manager)
+ [com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime](#iot-jobs-no-connection-available)
+ [software.amazon.awssdk.services.iam.model.IamException: The security token included in the request is invalid](#error-invalid-security-token)
+ [software.amazon.awssdk.services.iot.model.IotException: User: <user> is not authorized to perform: iot:GetPolicy](#missing-automatic-provisioning-permissions)
+ [Error: com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request](#shadow-manager-error-could-not-execute-shadow-get-request)
+ [Operation aws.greengrass\$1<operation> is not supported by Greengrass](#ipc-operation-not-supported)
+ [java.io.FileNotFoundException: <stream-manager-store-root-dir>/stream\$1manager\$1metadata\$1store (Permission denied)](#stream-manager-store-root-folder-not-found)
+ [com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: Private key or certificate with label <label> does not exist](#pkcs11-provider-error-private-key-or-certificate-does-not-exist)
+ [software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: User: <user> is not authorized to perform: secretsmanager:GetSecretValue on resource: <arn>](#secret-manager-error-not-authorized-to-perform-get-secret-value)
+ [software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: Access to KMS is not allowed](#secret-manager-error-no-kms-access)
+ [java.lang.NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi](#hardware-security-incompatible-nucleus-version)
+ [com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: CKR\$1OPERATION\$1NOT\$1INITIALIZED](#ckr-operation-not-initialized)
+ [Greengrass core device stuck on nucleus v2.12.3](#v2.12.3-revise-deployment)
+ [Greengrass nucleus v2.14.0 systemd template issue](#v2.14.0-systemd-template)

### ThrottlingException 来自 ListDeployments API
<a name="ThrottlingException"></a>

来自 `ListDeployments` API 的 `ThrottlingException`：当账户中有大量部署时，您可能会看到这种情况。

要解决该问题，可以执行下列一项操作：
+ 如果您使用 SDK，请指定 MaxResult 参数。例如，对于 [JavaSDK](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/greengrassv2/model/ListDeploymentsRequest.html#maxResults)，其值较小（例如 5）。
+ 可使用[AWS 服务配额](https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html) 来请求提高 `DescribeJob` API 的速率限制上限。您可以进入服务配额控制台，选择配额 AWS IoT ，限制名称为**DescribeJob 限制限制**。增量的范围从 10 到 50。

### 无法设置核心设备
<a name="unable-to-set-up-core-device"></a>

如果 AWS IoT Greengrass Core 软件安装程序失败而您无法设置核心设备，则可能需要卸载该软件并重试。有关更多信息，请参阅 [卸载 AWS IoT Greengrass Core 软件](uninstall-greengrass-core-v2.md)。

### 无法将 AWS IoT Greengrass Core 软件作为系统服务启动
<a name="unable-to-start-system-service"></a>

如果 AWS IoT Greengrass Core 软件无法启动，[请检查系统服务日志](monitor-logs.md#access-system-service-logs)以确定问题。一个常见问题是 PATH 环境变量（Linux）或 PATH 系统变量（Windows）中没有 Java。

### 无法将 Nucleus 设置为系统服务
<a name="unable-to-set-up-system-service"></a>

当 AWS IoT Greengrass Core 软件安装程序无法设置 AWS IoT Greengrass 为系统服务时，您可能会看到此错误。在 Linux 设备上，如果核心设备没有 [systemd](https://en.wikipedia.org/wiki/Systemd) 初始化系统，则通常会发生此错误。即使安装程序未能设置系统服务，安装程序也可以成功设置 AWS IoT Greengrass 核心软件。

请执行以下操作之一：
+ 将 C AWS IoT Greengrass ore 软件配置为系统服务并运行。必须将软件配置为系统服务才能使用的 AWS IoT Greengrass所有功能。您可以安装 [systemd](https://en.wikipedia.org/wiki/Systemd) 或使用不同的初始化系统。有关更多信息，请参阅 [将 Greengrass Nucleus 配置为系统服务](configure-greengrass-core-v2.md#configure-system-service)。
+ 在没有系统服务的情况下运行 C AWS IoT Greengrass ore 软件。您可以使用安装程序在 Greengrass 根文件夹中设置的加载程序脚本来运行该软件。有关更多信息，请参阅 [在没有系统服务的情况下运行 C AWS IoT Greengrass ore 软件](run-greengrass-core-v2.md#run-greengrass-core-no-system-service)。

### 无法连接到 AWS IoT Core
<a name="core-error-unable-to-connect-to-aws-iot"></a>

例如，当 AWS IoT Greengrass Core 软件无法连接 AWS IoT Core 以检索部署任务时，您可能会看到此错误。执行以下操作：
+ 检查您的核心设备是否可以连接到互联网，然后 AWS IoT Core. 有关您的设备连接的 AWS IoT Core 终端节点的更多信息，请参阅[配置 AWS IoT Greengrass 核心软件](configure-greengrass-core-v2.md)。
+ 检查您的核心设备是否 AWS IoT 使用了允许`iot:Connect`、`iot:Publish``iot:Receive`、和`iot:Subscribe`权限的证书。
+ 如果您的核心设备使用[网络代理](configure-greengrass-core-v2.md#configure-network-proxy)，请检查您的核心设备是否具有[设备角色](device-service-role.md)以及其角色是否允许 `iot:Connect`、`iot:Publish`、`iot:Receive` 和 `iot:Subscribe` 权限。

### 内存不足错误
<a name="java-out-of-memory"></a>

如果您的设备内存不足，无法在 Java 堆中分配对象，则通常会发生此错误。在内存有限的设备上，您可能需要指定最大堆大小来控制内存分配。有关更多信息，请参阅 [使用 JVM 选项控制内存分配](configure-greengrass-core-v2.md#jvm-tuning)。

### 无法安装 Greengrass CLI
<a name="unable-to-install-greengrass-cli"></a>

当你在 C AWS IoT Greengrass ore 的安装命令中使用`--deploy-dev-tools`参数时，你可能会看到以下控制台消息。

```
Thing group exists, it could have existing deployment and devices, hence NOT creating deployment for Greengrass first party dev tools, please manually create a deployment if you wish to
```

若因您的核心设备是现有部署的事物组成员而导致未安装 Greengrass CLI 组件，就会发生这种情况。如果您看到此消息，可以手动将 Greengrass CLI 组件 (`aws.greengrass.Cli`) 部署至该设备以安装 Greengrass CLI。有关更多信息，请参阅 [安装 Greengrass CLI](install-gg-cli.md)。

### User root is not allowed to execute
<a name="user-not-allowed-to-execute"></a>

当运行 C AWS IoT Greengrass ore 软件的用户（通常`root`）无权`sudo`与任何用户和任何组一起运行时，您可能会看到此错误。对于默认 `ggc_user` 系统用户，此错误如下所示：

```
Sorry, user root is not allowed to execute <command> as ggc_user:ggc_group.
```

检查您的 `/etc/sudoers` 文件是否授予该用户以其他组身份运行 `sudo` 的权限。用户权限在 `/etc/sudoers` 中应如以下示例所示。

```
root    ALL=(ALL:ALL) ALL
```

### com.aws.greengrass.lifecyclemanager.GenericExternalService: Could not determine user/group to run with
<a name="missing-default-run-with-user"></a>

当核心设备尝试运行组件，而 Greengrass Nucleus 未指定用于运行组件的默认系统用户时，可能会出现此错误。

要修复此问题，请配置 Greengrass Nucleus 以指定运行组件的默认系统用户。有关更多信息，请参阅[配置运行组件的用户](configure-greengrass-core-v2.md#configure-component-user)和[配置默认组件用户](configure-greengrass-core-v2.md#configure-default-component-user)。

### Failed to map segment from shared object: operation not permitted
<a name="tmp-folder-noexec"></a>

当 AWS IoT Greengrass Core 软件无法启动时，您可能会看到此错误，因为该`/tmp`文件夹是使用`noexec`权限安装的。默认情况下，[AWS 通用运行时（CRT）库](https://github.com/awslabs/aws-crt-java)使用 `/tmp` 文件夹。

请执行以下操作之一：
+ 运行以下命令以通过 `exec` 权限重新装载 `/tmp` 文件夹，然后重试。

  ```
  sudo mount -o remount,exec /tmp
  ```
+ 如果你运行 Greengrass nucleus v2.5.0 或更高版本，则可以设置 JVM 选项来更改 CRT 库使用的文件夹。 AWS 您可以在部署中或安装核心软件时在 Greengrass nucleus 组件配置中指定`jvmOptions`参数。 AWS IoT Greengrass */path/to/use*替换为 AWS CRT 库可以使用的文件夹的路径。

  ```
  {
    "jvmOptions": "-Daws.crt.lib.dir=\"/path/to/use\""
  }
  ```

### Windows 服务设置失败
<a name="failed-to-set-up-windows-service"></a>

如果你在微软 Windows 2016 设备上安装 AWS IoT Greengrass 酷睿软件，你可能会看到这个错误。Windows 2016 不支持 AWS IoT Greengrass 核心软件，有关支持的操作系统的列表，请参阅[支持的平台](greengrass-nucleus-component.md#greengrass-v2-supported-platforms)。

如果您必须使用 Windows 2016，则可以先执行以下操作：

1. 解压缩下载的 AWS IoT Greengrass Core 安装档案

1. 在 `Greengrass` 目录中打开 `bin/greengrass.xml.template` 文件。

1. 将 `<autoRefresh>` 标签添加到文件末尾的 `</service>` 标签之前。

   ```
     </log>
     <autoRefresh>false</autoRefresh>
   </service>
   ```

### com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager
<a name="failed-to-get-trust-manager"></a>

在没有根证书颁发机构 (CA) 文件的情况下安装 C AWS IoT Greengrass ore 软件时，您可能会看到此错误。

```
2022-06-05T10:00:39.556Z [INFO] (main) com.aws.greengrass.lifecyclemanager.Kernel: service-loaded. {serviceName=DeploymentService}
2022-06-05T10:00:39.943Z [WARN] (main) com.aws.greengrass.componentmanager.ClientConfigurationUtils: configure-greengrass-mutual-auth. Error during configure greengrass client mutual auth. {}
com.aws.greengrass.util.exceptions.TLSAuthException: Failed to get trust manager
```

检查您是否在提供给安装程序的配置文件中使用 `rootCaPath` 参数指定了有效的 CA 根文件。有关更多信息，请参阅 [安装 AWS IoT Greengrass Core 软件](install-greengrass-core-v2.md)。

### com.aws.greengrass.deployment.IotJobsHelper: No connection available during subscribing to Iot Jobs descriptions topic. Will retry in sometime
<a name="iot-jobs-no-connection-available"></a>

当核心设备无法连接以订阅部署任务通知时 AWS IoT Core ，您可能会看到此警告消息。执行以下操作：
+ 检查核心设备是否已连接到互联网并且可以访问您配置 AWS IoT 的数据端点。有关核心设备所使用端点的更多信息，请参阅[允许设备流量通过代理或防火墙](allow-device-traffic.md)。
+ 检查 Greengrass 日志中是否有其他能揭示其他根本原因的错误。

### software.amazon.awssdk.services.iam.model.IamException: The security token included in the request is invalid
<a name="error-invalid-security-token"></a>

当您[安装具有自动配置功能的 AWS IoT Greengrass Core 软件](quick-installation.md)时，您可能会看到此错误，而安装程序使用的 AWS 会话令牌无效。执行以下操作：
+ 如果您使用临时安全凭证，请检查会话令牌是否正确，以及是否正在复制和粘贴完整的会话令牌。
+ 如果您使用长期安全凭证，请检查设备上是否有以前使用临时凭证时留下的会话令牌。执行以下操作：

  1. 运行以下命令以取消设置会话令牌环境变量。

------
#### [ Linux or Unix ]

     ```
     unset AWS_SESSION_TOKEN
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_SESSION_TOKEN=
     ```

------
#### [ PowerShell ]

     ```
     Remove-Item Env:\AWS_SESSION_TOKEN
     ```

------

  1. 检查 AWS 凭证文件是否包含会话令牌`aws_session_token`。`~/.aws/credentials`如果是，请从文件中移除该行。

     ```
     aws_session_token = AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
     ```

您也可以在不提供 AWS 凭据的情况下安装 AWS IoT Greengrass Core 软件。有关更多信息，请参阅 [使用手动资源配置来安装 AWS IoT Greengrass Core 软件](manual-installation.md)或 [安装具有 AWS IoT 队列配置功能的 C AWS IoT Greengrass ore 软件](fleet-provisioning.md)。

### software.amazon.awssdk.services.iot.model.IotException: User: <user> is not authorized to perform: iot:GetPolicy
<a name="missing-automatic-provisioning-permissions"></a>

在[安装具有自动配置功能的 AWS IoT Greengrass Core 软件](quick-installation.md)时，您可能会看到此错误，而安装程序使用的 AWS 凭据不具有所需权限。有关所需权限的更多信息，请参阅[安装程序配置资源的最低 IAM 策略](provision-minimal-iam-policy.md)。

检查凭证的 IAM 身份权限，并授予 IAM 身份任何缺失的所需权限。

### Error: com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request
<a name="shadow-manager-error-could-not-execute-shadow-get-request"></a>

当你使用[影子管理器组件[同步设备阴](sync-shadows-with-iot-core.md)影](shadow-manager-component.md)时，你可能会看到这个错误 AWS IoT Core。HTTP 403 状态码表示出现此错误是因为核心设备的 AWS IoT 策略未授予呼叫`GetThingShadow`权限。

```
com.aws.greengrass.shadowmanager.sync.model.FullShadowSyncRequest: Could not execute cloud shadow get request. {thing name=MyGreengrassCore, shadow name=MyShadow}
2021-07-14T21:09:02.456Z [ERROR] (pool-2-thread-109) com.aws.greengrass.shadowmanager.sync.SyncHandler: sync. Skipping sync request. {thing name=MyGreengrassCore, shadow name=MyShadow}
com.aws.greengrass.shadowmanager.exception.SkipSyncRequestException: software.amazon.awssdk.services.iotdataplane.model.IotDataPlaneException: null (Service: IotDataPlane, Status Code: 403, Request ID: f6e713ba-1b01-414c-7b78-5beb3f3ad8f6, Extended Request ID: null)
```

要与本地阴影同步 AWS IoT Core，核心设备的 AWS IoT 策略必须授予以下权限：
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

检查核心设备的 AWS IoT 策略，并添加缺少的所有必需权限。有关更多信息，请参阅下列内容：
+ AWS IoT Core 《*AWS IoT 开发者指南*》中的@@ [策略操作](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)
+ [更新核心设备的 AWS IoT 政策](device-auth.md#update-core-device-iot-policy)

### Operation aws.greengrass\$1<operation> is not supported by Greengrass
<a name="ipc-operation-not-supported"></a>

当您在自定义 Greengrass 组件中使用[进程间通信 (IPC) 操作](interprocess-communication.md)并且核心设备上未安装所需的组件时，您可能会看到此错误 AWS。

要解决此问题，请在组件[配方中添加所需的组件作为依赖项](component-recipe-reference.md#recipe-reference-component-dependencies)，这样 AWS IoT Greengrass Core 软件就会在您部署组件时安装所需的组件。
+ [检索密钥值](ipc-secret-manager.md) – `aws.greengrass.SecretManager`
+ [与本地影子交互](ipc-local-shadows.md) – `aws.greengrass.ShadowManager`
+ [管理本地部署和组件](ipc-local-deployments-components.md) – `aws.greengrass.Cli` v2.6.0 或更高版本
+ [对客户端设备进行身份验证和授权](ipc-client-device-auth.md) – `aws.greengrass.clientdevices.Auth` v2.2.0 或更高版本

### java.io.FileNotFoundException: <stream-manager-store-root-dir>/stream\$1manager\$1metadata\$1store (Permission denied)
<a name="stream-manager-store-root-folder-not-found"></a>

当您将[流管理器](stream-manager-component.md)配置为使用不存在或不具备正确权限的根文件夹时，您可能会在流管理器日志文件 (`aws.greengrass.StreamManager.log`) 中看到此错误。有关如何配置此文件夹的更多信息，请参阅[流管理器配置](stream-manager-component.md#stream-manager-component-configuration)。

### com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: Private key or certificate with label <label> does not exist
<a name="pkcs11-provider-error-private-key-or-certificate-does-not-exist"></a>

当 [PKCS \$111 提供程序组件](pkcs11-provider-component.md)无法找到或加载您在将 C AWS IoT Greengrass ore 软件配置为使用[硬件安全模块 (HSM](hardware-security.md)) 时指定的私钥或证书时，就会发生此错误。执行以下操作：
+ 使用配置 AWS IoT Greengrass 核心软件使用的插槽、用户 PIN 和对象标签，检查私钥和证书是否存储在 HSM 中。
+ 检查私钥和证书在 HSM 中是否使用相同的对象标签。
+ 如果您的 HSM 支持对象 IDs，请检查私钥和证书在 HSM 中是否使用相同的对象 ID。

查看 HSM 的文档，了解如何在 HSM 中查询有关安全令牌的详细信息。如果您需要更改安全令牌的槽位、对象标签或对象 ID，请查看 HSM 文档，了解如何操作。

### software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: User: <user> is not authorized to perform: secretsmanager:GetSecretValue on resource: <arn>
<a name="secret-manager-error-not-authorized-to-perform-get-secret-value"></a>

当您使用[密钥管理器组件部署密钥](secret-manager-component.md)时，可能会发生此错误。 AWS Secrets Manager 如果核心设备的[令牌交换 IAM 角色](device-service-role.md)未授予获取密钥的权限，则部署失败且 Greengrass 日志中包含此错误。

**授权核心设备下载密钥**

1. 为核心设备的令牌交换角色添加 `secretsmanager:GetSecretValue` 权限。以下示例策略语句将授予获取密钥值的权限。

   ```
   {
       "Effect": "Allow",
       "Action": [
           "secretsmanager:GetSecretValue"
       ],
       "Resource": [
           "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyGreengrassSecret-abcdef"
       ]
   }
   ```

   有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

1. 将部署重新应用到核心设备上。请执行以下操作之一：
   + 在不做任何更改的情况下修改部署。核心设备收到修改后的部署后，会再次尝试下载秘密。有关更多信息，请参阅 [修改部署](revise-deployments.md)。
   + 重新启动 C AWS IoT Greengrass ore 软件以重试部署。有关更多信息，请参阅 [运行 AWS IoT Greengrass 核心软件](run-greengrass-core-v2.md)。

   如果密钥管理器成功下载密钥，则部署成功。

### software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException: Access to KMS is not allowed
<a name="secret-manager-error-no-kms-access"></a>

当您使用密钥[管理器组件部署由密](secret-manager-component.md)钥加密的 AWS Secrets Manager 密 AWS Key Management Service 钥时，可能会发生此错误。如果核心设备的[令牌交换 IAM 角色](device-service-role.md)未授予解密密钥的权限，则部署失败且 Greengrass 日志中包含此错误。

要解决这个问题，请为核心设备的令牌交换角色添加 `kms:Decrypt` 权限。有关更多信息，请参阅下列内容：
+ 《AWS Secrets Manager 用户指南》**中的[密钥加密和解密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html)
+ [授权核心设备与 AWS 服务交互](device-service-role.md)

### java.lang.NoClassDefFoundError: com/aws/greengrass/security/CryptoKeySpi
<a name="hardware-security-incompatible-nucleus-version"></a>

当你尝试安装具有[硬件安全性的 AWS IoT Greengrass Core软件并且使用不支持硬件安全](hardware-security.md)集成的早期Greengrass nucleus版本时，你可能会看到这个错误。要使用硬件安全集成，必须使用 Greengrass Nucleus v2.5.3 或更高版本。

### com.aws.greengrass.security.provider.pkcs11.PKCS11CryptoKeyService: CKR\$1OPERATION\$1NOT\$1INITIALIZED
<a name="ckr-operation-not-initialized"></a>

当你将 C AWS IoT Greengrass ore 作为系统服务运行时使用该 TPM2 库时，你可能会看到此错误。

此错误表示您需要添加一个环境变量，该变量在 C AWS IoT Greengrass ore systemd 服务文件中提供 PKCS \$111 存储的位置。

有关更多信息，请参阅 [PKCS\$111 提供程序](pkcs11-provider-component.md) 组件文档的“要求”部分。

### Greengrass core device stuck on nucleus v2.12.3
<a name="v2.12.3-revise-deployment"></a>

如果您的 Greengrass 核心设备无法从 Nucleus 版本 2.12.3 修改您的部署，则可能需要下载 `Greengrass.jar` 文件并将其替换为 Greengrass Nucleus 版本 2.12.2。执行以下操作：

1. 在 Greengrass 核心设备上，运行以下命令以停止 Greengrass Core 软件。

------
#### [ Linux or Unix ]

   ```
   sudo systemctl stop greengrass
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   sc stop "greengrass"
   ```

------
#### [ PowerShell ]

   ```
   Stop-Service -Name "greengrass"
   ```

------

1. 在您的核心设备上，将 AWS IoT Greengrass 软件下载到名为的文件中`greengrass-2.12.2.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip > greengrass-2.12.2.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip > greengrass-2.12.2.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-2.12.2.zip -OutFile greengrass-2.12.2.zip
   ```

------

1. 将 AWS IoT Greengrass Core 软件解压缩到设备上的某个文件夹。*GreengrassInstaller*替换为要使用的文件夹。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-2.12.2.zip -d GreengrassInstaller && rm greengrass-2.12.2.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-2.12.2.zip -C GreengrassInstaller && del greengrass-2.12.2.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-2.12.2.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-2.12.2.zip
   ```

------

1. 运行以下命令，使用 Nucleus 版本 2.12.2 Greengrass JAR 文件覆盖 Nucleus 版本 2.12.3 Greengrass JAR 文件。

------
#### [ Linux or Unix ]

   ```
   sudo cp ./GreengrassInstaller/lib/Greengrass.jar /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   robocopy ./GreengrassInstaller/lib/Greengrass.jar /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib /E
   ```

------
#### [ PowerShell ]

   ```
   cp -Path ./GreengrassInstaller/lib/Greengrass.jar -Destination /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.3/aws.greengrass.nucleus/lib
   ```

------

1. 运行以下命令以启动 Greengrass Core 软件。

------
#### [ Linux or Unix ]

   ```
   sudo systemctl start greengrass
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   sc start "greengrass"
   ```

------
#### [ PowerShell ]

   ```
   Start-Service -Name "greengrass"
   ```

------

### Greengrass nucleus v2.14.0 systemd template issue
<a name="v2.14.0-systemd-template"></a>

如果使用默认 systemd 服务模板在 Linux 设备上安装了 Greengrass Nucleus v2.14.0，您可能会遇到这个问题。执行以下操作：

1. 在 Greengrass 核心设备上，运行以下命令将 systemd 服务文件恢复至其在 Nucleus v2.13.0 及更早版本中的状态。

------
#### [ Linux or Unix ]

   ```
   sudo sed -i 's|ExecStart=/bin/sh -c "\(.*\) >> .*/logs/loader.log 2>&1"|ExecStart=/bin/sh \1|' /etc/systemd/system/greengrass.service
   ```

------

1. 应用更改。

------
#### [ Linux or Unix ]

   ```
   sudo systemctl daemon-reload
   sudo systemctl restart greengrass
   ```

------

## AWS IoT Greengrass 云问题
<a name="greengrass-cloud-issues"></a>

使用以下信息对 AWS IoT Greengrass 控制台和 API 的问题进行故障排除。每个条目都与执行操作时可能看到的错误消息相对应。

### An error occurred (AccessDeniedException) when calling the CreateComponentVersion operation: User: arn:aws:iam::123456789012:user/<username> is not authorized to perform: null
<a name="cloud-error-create-component-version-not-authorized-to-perform-null"></a>

当您通过 AWS IoT Greengrass 控制台或通过[CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html)操作创建组件版本时，您可能会看到此错误。

此错误表明您的配方并非有效 JSON 或 YAML。请检查配方的语法，修复所有语法问题，然后再次尝试。您可以使用在线 JSON 或 YAML 语法检查器来识别配方中的语法问题。

### Invalid Input: Encountered following errors in Artifacts: \$1<s3ArtifactUri> = Specified artifact resource cannot be accessed\$1
<a name="cloud-error-specified-artifact-resource-cannot-be-accessed"></a>

当您通过 AWS IoT Greengrass 控制台或通过[CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html)操作创建组件版本时，您可能会看到此错误。此错误表明组件配方中的 S3 构件无效。

执行以下操作：
+ 检查 S3 存储桶是否与您创建组件的 AWS 区域 位置相同。 AWS IoT Greengrass 不支持跨区域请求组件工件。
+ 检查构件 URI 是否为有效的 S3 对象 URL，并检查该 S3 对象 URL 中是否存在该构件。
+ 检查您是否 AWS 账户 有权通过其 S3 对象 URL 访问该项目。

### INACTIVE deployment status
<a name="cloud-error-inactive-deployment"></a>

在没有必需的依赖 AWS IoT 策略的情况下调用 [ListDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListDeployments.html)API 时，您可能会获得`INACTIVE`部署状态。您必须具有所需权限才能获得准确的部署状态。您可以在[由 AWS IoT Greengrass V2定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotgreengrassv2.html#awsiotgreengrassv2-actions-as-permissions)中，按照 `ListDeployments` 所需的权限找到相关操作。如果没有所需的依赖 AWS IoT 权限，您仍然可以看到部署状态，但可能会看到不准确的部署状态`INACTIVE`。

## 核心设备部署问题
<a name="greengrass-core-deployment-issues"></a>

排查 Greengrasss 核心设备上的部署问题。每个条目都与您可能在核心设备上看到的日志消息相对应。

**Topics**
+ [Error: com.aws.greengrass.componentmanager.exceptions.PackageDownloadException: Failed to download artifact](#core-error-failed-to-download-artifact-package-download-exception)
+ [Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.](#core-error-failed-to-download-artifact-checksum-mismatch-exception)
+ [Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>](#core-error-no-available-component-version)
+ [software.amazon.awssdk.services.greengrassv2data.model.ResourceNotFoundException: The latest version of Component <componentName> doesn't claim platform <coreDevicePlatform> compatibility](#deployment-error-no-platform-compatibility)
+ [com.aws.greengrass.componentmanager.exceptions.PackagingException: The deployment attempts to update the nucleus from aws.greengrass.Nucleus-<version> to aws.greengrass.Nucleus-<version> but no component of type nucleus was included as target component](#deployment-error-nucleus-minor-version-update)
+ [Error: com.aws.greengrass.deployment.exceptions.DeploymentException: Unable to process deployment. Greengrass launch directory is not set up or Greengrass is not set up as a system service](#deployment-error-unable-to-process-deployment)
+ [Info: com.aws.greengrass.deployment.exceptions.RetryableDeploymentDocumentDownloadException: Greengrass Cloud Service returned an error when getting full deployment configuration](#core-error-getting-full-deployment-configuration)
+ [Warn: com.aws.greengrass.deployment.DeploymentService: Failed to get thing group hierarchy](#core-warning-failed-to-get-thing-group-hierarchy)
+ [Info: com.aws.greengrass.deployment.DeploymentDocumentDownloader: Calling Greengrass cloud to get full deployment configuration](#core-info-repetitive-get-full-deployment-configuration)
+ [Caused by: software.amazon.awssdk.services.greengrassv2data.model.GreengrassV2DataException: null (Service: GreengrassV2Data, Status Code: 403, Request ID: <some\$1request\$1id>, Extended Request ID: null)](#greengrassv2dataexception)

### Error: com.aws.greengrass.componentmanager.exceptions.PackageDownloadException: Failed to download artifact
<a name="core-error-failed-to-download-artifact-package-download-exception"></a>

当核心设备应用部署时，当 AWS IoT Greengrass 核心软件无法下载组件工件时，您可能会看到此错误。该错误导致部署失败。

当您收到此错误时，日志中还会包含可用于识别具体问题的堆栈跟踪。以下每个条目都与您可能在 `Failed to download artifact` 错误消息的堆栈跟踪中看到的消息相对应。

**Topics**
+ [software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 403, Request ID: null, ...)](#core-error-failed-to-download-artifact-s3-permissions)
+ [software.amazon.awssdk.services.s3.model.S3Exception: Access Denied (Service: S3, Status Code: 403, Request ID: <requestID>](#core-error-failed-to-download-artifact-get-bucket-location-403)

#### software.amazon.awssdk.services.s3.model.S3Exception: null (Service: S3, Status Code: 403, Request ID: null, ...)
<a name="core-error-failed-to-download-artifact-s3-permissions"></a>

在以下情况下，该[PackageDownloadException 错误](#core-error-failed-to-download-artifact-package-download-exception)可能包括此堆栈跟踪：
+ 组件构件在组件配方中指定的 S3 对象 URL 中不可用。检查您是否已将构件上传至 S3 存储桶，以及构件 URI 是否与存储桶中构件的 S3 对象 URL 相匹配。
+ 核心设备的[令牌交换角色](device-service-role.md)不允许 AWS IoT Greengrass 核心软件从您在组件配方中指定的 S3 对象 URL 下载组件工件。检查令牌交换角色是否允许 `s3:GetObject` 使用该构件可用的 S3 对象 URL。

#### software.amazon.awssdk.services.s3.model.S3Exception: Access Denied (Service: S3, Status Code: 403, Request ID: <requestID>
<a name="core-error-failed-to-download-artifact-get-bucket-location-403"></a>

当核心设备无权调用时，[PackageDownloadException 错误](#core-error-failed-to-download-artifact-package-download-exception)可能包括此堆栈跟踪`s3:GetBucketLocation`。该错误消息包括以下消息。

```
reason: Failed to determine S3 bucket location
```

检查核心设备的[令牌交换角色](device-service-role.md)是否允许 `s3:GetBucketLocation` 使用该构件可用的 S3 存储桶。

### Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.
<a name="core-error-failed-to-download-artifact-checksum-mismatch-exception"></a>

当核心设备应用部署时，当 AWS IoT Greengrass 核心软件无法下载组件工件时，您可能会看到此错误。部署失败，因为下载的构件文件的校验和与创建组件时 AWS IoT Greengrass 计算的校验和不匹配。

执行以下操作：
+ 检查托管构件文件的 S3 存储桶中，构件文件是否发生变更。如果自创建组件以来文件发生了变更，请将其恢复至核心设备期望的先前版本。如果您无法将文件恢复为其先前版本，或是您想要使用该文件的新版本，请使用构件文件创建该组件的新版本。
+ 检查核心设备的互联网连接。如果构件文件在下载时损坏，则可能会出现此错误。创建新部署，然后再次尝试。

### Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>
<a name="core-error-no-available-component-version"></a>

当核心设备找不到满足该核心设备部署要求的组件版本时，可能会出现此消息。核心设备在 AWS IoT Greengrass 服务中和本地设备上检查组件。错误消息包括每个部署的目标以及该部署对组件的版本要求。部署目标可以是事物、事物组或 `LOCAL_DEPLOYMENT`，代表核心设备上的本地部署。

以下情况下可能会出现此问题：
+ 核心设备是多个部署的目标，而这些部署对组件版本的要求存在冲突。例如，核心设备可能是包含一个 `com.example.HelloWorld` 组件的多个部署的目标，其中一个部署需要版本 1.0.0，另一个需要版本 1.0.1。不可能有一个组件同时满足这两项要求，因此部署失败。
+ 该组件版本不存在于 AWS IoT Greengrass 服务中或本地设备上。例如，该组件可能已被删除。
+ 有符合版本要求的组件版本，但都无法与核心设备平台兼容。
+ 核心设备的 AWS IoT 策略不授予`greengrass:ResolveComponentCandidates`权限。在错误日志中查找 `Status Code: 403` 以识别此问题。要解决此问题，请将 `greengrass:ResolveComponentCandidates` 权限添加至核心设备的 AWS IoT 策略中。有关更多信息，请参阅 [AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

要解决此问题，请修改部署以包含兼容的组件版本或删除不兼容的组件版本。有关如何修改云部署的更多信息，请参阅 [修改部署](revise-deployments.md)。有关如何修改本地部署的更多信息，请参阅 [AWS IoT Greengrass CLI 部署创建](gg-cli-deployment.md#deployment-create)命令。

### software.amazon.awssdk.services.greengrassv2data.model.ResourceNotFoundException: The latest version of Component <componentName> doesn't claim platform <coreDevicePlatform> compatibility
<a name="deployment-error-no-platform-compatibility"></a>

当您将组件部署至核心设备时，如果该组件未列出与核心设备平台兼容的平台，则可能会出现此错误。请执行以下操作之一：
+ 如果该组件为自定义 Greengrass 组件，则可以更新该组件以使其与核心设备兼容。添加与核心设备平台匹配的新清单，或更新现有清单以匹配核心设备平台。有关更多信息，请参阅 [AWS IoT Greengrass 组件配方参考](component-recipe-reference.md)。
+ 如果组件由提供 AWS，请检查该组件的另一个版本是否与核心设备兼容。如果没有兼容的版本，请在 [AWS re:Post](https://repost.aws/) 上使用 [AWS IoT Greengrass 标签](https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass)联系我们，或联系 [支持](https://aws.amazon.com/contact-us/)。

### com.aws.greengrass.componentmanager.exceptions.PackagingException: The deployment attempts to update the nucleus from aws.greengrass.Nucleus-<version> to aws.greengrass.Nucleus-<version> but no component of type nucleus was included as target component
<a name="deployment-error-nucleus-minor-version-update"></a>

当您部署依赖于 [Greengrass Nucleus](greengrass-nucleus-component.md) 的组件时，如果核心设备运行的 Greengrass Nucleus 版本早于可用的最新次要版本，则可能会出现此错误。出现此错误的原因是 AWS IoT Greengrass Core 软件会尝试自动将组件更新到最新的兼容版本。但是， AWS IoT Greengrass Core 软件会阻止 Greengrass 核更新到新的次要版本，因为提供的 AWS几个组件依赖于 Greengrass 核的特定次要版本。有关更多信息，请参阅 [Greengrass Nucleus 更新行为](update-greengrass-core-v2.md#ota-update-behavior-nucleus)。

您必须[修改部署](revise-deployments.md)以指定要使用的 Greengrass Nucleus 版本。请执行以下操作之一：
+ 修改部署以指定核心设备当前运行的 Greengrass Nucleus 版本。
+ 修改部署以指定 Greengrass Nucleus 的更高次要版本。如果选择此选项，则还必须更新所有依赖于 Greengr AWS ass 核的特定次要版本的组件的版本。有关更多信息，请参阅 [AWS 提供的组件](public-components.md)。

### Error: com.aws.greengrass.deployment.exceptions.DeploymentException: Unable to process deployment. Greengrass launch directory is not set up or Greengrass is not set up as a system service
<a name="deployment-error-unable-to-process-deployment"></a>

当您将 Greengrass 设备从一个事物组移动到另一个事物组，然后再移回包含需要重启 Greengrass 的部署的原组时，可能会出现此错误。

要解决该问题，请为设备重新创建启动目录。强烈建议您升级至 Greengrass Nucleus 的 2.9.6 或更高版本。

以下是用于重新创建启动目录的 Linux 脚本。将脚本保存在名为 `fix_directory.sh` 的文件中。

```
#!/bin/bash

set -e

GG_ROOT=$1
GG_VERSION=$2

CURRENT="$GG_ROOT/alts/current"

if [ ! -L "$CURRENT" ]; then
  mkdir -p $GG_ROOT/alts/directory_fix
  echo "Relinking $GG_ROOT/alts/directory_fix to $CURRENT"
  ln -sf $GG_ROOT/alts/directory_fix $CURRENT
fi

TARGET=$(readlink $CURRENT)

if [[ ! -d "$TARGET" ]]; then
  echo "Creating directory: $TARGET"
  mkdir -p "$TARGET"
fi

DISTRO_LINK="$TARGET/distro"
DISTRO="$GG_ROOT/packages/artifacts-unarchived/aws.greengrass.Nucleus/$GG_VERSION/aws.greengrass.nucleus/"
echo "Relinking Nucleus artifacts to $DISTRO_LINK"
ln -sf $DISTRO $DISTRO_LINK
```

要运行脚本，请执行以下命令：

```
[root@ip-172-31-27-165 ~]# ./fix_directory.sh /greengrass/v2 2.9.5
Relinking /greengrass/v2/alts/directory_fix to /greengrass/v2/alts/current
Relinking Nucleus artifacts to /greengrass/v2/alts/directory_fix/distro
```

### Info: com.aws.greengrass.deployment.exceptions.RetryableDeploymentDocumentDownloadException: Greengrass Cloud Service returned an error when getting full deployment configuration
<a name="core-error-getting-full-deployment-configuration"></a>

当核心设备收到大于 7 KB（适用于以事物为目标的部署）或 31 KB（适用于以事物组为目标的部署）的大型部署文档时，可能会出现此错误。要检索大型部署文档，核心设备的 AWS IoT 策略必须允许该`greengrass:GetDeploymentConfiguration`权限。核心设备没有此权限时可能会发生此错误。发生此错误时，部署将无限期重试，且状态为**进行中** (`IN_PROGRESS`)。

要解决此问题，请将`greengrass:GetDeploymentConfiguration`权限添加到核心设备的 AWS IoT 策略中。有关更多信息，请参阅 [更新核心设备的 AWS IoT 政策](device-auth.md#update-core-device-iot-policy)。

### Warn: com.aws.greengrass.deployment.DeploymentService: Failed to get thing group hierarchy
<a name="core-warning-failed-to-get-thing-group-hierarchy"></a>

当核心设备收到部署并且核心设备的 AWS IoT 策略不允许该`greengrass:ListThingGroupsForCoreDevice`权限时，您可能会看到此警告。创建部署时，核心设备使用此权限来识别其事物组，并移除核心设备所在事物组的组件。如果核心设备运行 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.5.0，则部署失败。如果核心设备运行 Greengrass Nucleus v2.5.1 或更高版本，则部署会继续进行，但不会移除组件。有关事物组移除行为的更多信息，请参阅[将 AWS IoT Greengrass 组件部署到设备](manage-deployments.md)。

要更新核心设备的行为以移除要从中移除核心设备的事物组的组件，请将`greengrass:ListThingGroupsForCoreDevice`权限添加到核心设备的 AWS IoT 策略中。有关更多信息，请参阅 [更新核心设备的 AWS IoT 政策](device-auth.md#update-core-device-iot-policy)。

### Info: com.aws.greengrass.deployment.DeploymentDocumentDownloader: Calling Greengrass cloud to get full deployment configuration
<a name="core-info-repetitive-get-full-deployment-configuration"></a>

您可能会看到此信息消息多次打印而不会出现错误，因为核心设备会在 `DEBUG` 日志层面记录错误。当核心设备收到大型部署文档时，可能会出现此问题。发生此问题时，部署将无限期重试，且状态为**进行中** (`IN_PROGRESS`)。有关如何解决此问题的信息，请参阅[此故障排除条目](#core-error-getting-full-deployment-configuration)。

### Caused by: software.amazon.awssdk.services.greengrassv2data.model.GreengrassV2DataException: null (Service: GreengrassV2Data, Status Code: 403, Request ID: <some\$1request\$1id>, Extended Request ID: null)
<a name="greengrassv2dataexception"></a>

数据面板 API 没有 `iot:Connect` 权限时可能会出现此错误。如果没有正确的策略，您将收到 `GreengrassV2DataException: 403`。要创建权限策略，请按照以下说明进行操作：[创建 AWS IoT 策略](fleet-provisioning-setup.md#create-iot-policy)。

## 核心设备组件问题
<a name="greengrass-core-component-issues"></a>

排查核心设备上的 Greengrasss 组件问题。

**Topics**
+ [Warn: '<command>' is not recognized as an internal or external command](#component-warn-command-not-recognized)
+ [Python 脚本不记录消息](#python-component-no-log-output)
+ [更改默认配置时不更新组件配置](#update-component-configuration-to-default-configuration)
+ [awsiot.greengrasscoreipc.model.UnauthorizedError](#ipc-unauthorized-error)
+ [com.aws.greengrass.authorization.exceptions.AuthorizationException: Duplicate policy ID "<id>" for principal "<componentList>"](#ipc-duplicate-authorization-policy-ids)
+ [com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 400)](#token-exchange-service-credentials-http-400)
+ [com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 403)](#token-exchange-service-credentials-http-403)
+ [com.aws.greengrass.tes.CredentialsProviderError: Could not load credentials from any providers](#token-exchange-service-credentials-provider-error)
+ [Received error when attempting to retrieve ECS metadata: Could not connect to the endpoint URL: "<tokenExchangeServiceEndpoint>"](#token-exchange-service-not-running)
+ [copyFrom: <configurationPath> is already a container, not a leaf](#configuration-key-is-container-cannot-become-leaf)
+ [com.aws.greengrass.componentmanager.plugins.docker.exceptions.DockerLoginException: Error logging into the registry using credentials - 'The stub received bad data.'](#docker-login-stub-received-bad-data)
+ [java.io.IOException: Cannot run program "cmd" ...: [LogonUser] The password for this account has expired.](#windows-account-password-expired)
+ [aws.greengrass.StreamManager: Instant exceeds minimum or maximum instant](#stream-manager-instant-exceeds-maximun-minimum)

### Warn: '<command>' is not recognized as an internal or external command
<a name="component-warn-command-not-recognized"></a>

当 Core 软件无法在组件的生命周期脚本中运行命令时 AWS IoT Greengrass ，您可能会在 Greengrass 组件的日志中看到此错误。由于此错误，组件的状态变为 `BROKEN`。如果运行该组件的系统用户（如 `ggc_user`）无法在 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 文件夹中找到该命令的可执行文件，则可能出现此错误。

在 Windows 设备上，检查包含可执行文件的文件夹是否位于运行该组件的系统用户所在的 `PATH` 中。如果在 `PATH` 中没有找到，请执行以下操作之一：
+ 将可执行文件所在文件夹添加至 `PATH` 系统变量，供所有用户使用。然后，重新启动该组件。

  如果您运行 Greengrass nucleus 2.5.0，则在更新`PATH`系统变量后，必须重新启动 Core 软件才能运行更新后的 AWS IoT Greengrass 组件。`PATH`如果 AWS IoT Greengrass Core 软件在您重新启动软件`PATH`后未使用更新的版本，请重新启动设备并重试。有关更多信息，请参阅 [运行 AWS IoT Greengrass 核心软件](run-greengrass-core-v2.md)。
+ 将可执行文件所在文件夹添加至运行该组件的系统用户的 `PATH` 用户变量中。

### Python 脚本不记录消息
<a name="python-component-no-log-output"></a>

Greengrass 核心设备收集可用于识别组件问题的日志。如果您的 Python 脚本的 `stdout` 和 `stderr` 消息未出现在组件日志中，则可能需要在 Python 中为这些标准输出流刷新缓冲区或禁用缓冲。执行以下任一操作：
+ 使用 [-u](https://docs.python.org/3/using/cmdline.html#cmdoption-u) 参数运行 Python 以禁用 `stdout` 和 `stderr` 上的缓冲。

------
#### [ Linux or Unix ]

  ```
  python3 -u hello_world.py
  ```

------
#### [ Windows ]

  ```
  py -3 -u hello_world.py
  ```

------
+ 在组件配方中使用 [Setenv](component-recipe-reference.md#lifecycle-setenv-definition) 将 [PYTHONUNBUFFERED](https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUNBUFFERED) 环境变量设置为非空字符串。此环境变量禁用 `stdout` 和 `stderr` 上的缓冲。
+ 刷新 `stdout` 或 `stderr` 流的缓冲区。请执行以下操作之一：
  + 打印时刷新消息。

    ```
    import sys
    
    print('Hello, error!', file=sys.stderr, flush=True)
    ```
  + 打印后刷新消息。在刷新流之前，您可以发送多条消息。

    ```
    import sys
    
    print('Hello, error!', file=sys.stderr)
    sys.stderr.flush()
    ```

有关如何验证 Python 脚本是否输出日志消息的更多信息，请参阅 [监控 AWS IoT Greengrass 日志](monitor-logs.md)。

### 更改默认配置时不更新组件配置
<a name="update-component-configuration-to-default-configuration"></a>

当您更改组件配方中的 `DefaultConfiguration` 时，新的默认配置不会在部署期间取代该组件的现有配置。要应用新的默认配置，必须将组件的配置重置为其默认设置。部署组件时，请指定一个空字符串作为[重置更新](update-component-configurations.md#reset-configuration-update)。

------
#### [ Console ]

**重置路径**  

```
[""]
```

------
#### [ AWS CLI ]

以下命令会创建对核心设备的部署。

```
aws greengrassv2 create-deployment --cli-input-json file://reset-configuration-deployment.json
```

`reset-configuration-deployment.json` 文件包含以下 JSON 文档。

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "com.example.HelloWorld": {
      "componentVersion": "1.0.0",
      "configurationUpdate": {,
        "reset": [""]
      }
    }
  }
}
```

------
#### [ Greengrass CLI ]

以下 [Greengrass CLI](greengrass-cli-component.md) 命令会在核心设备上创建本地部署。

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "com.example.HelloWorld=1.0.0" \
  --update-config reset-configuration-deployment.json
```

`reset-configuration-deployment.json` 文件包含以下 JSON 文档。

```
{
  "com.example.HelloWorld": {
    "RESET": [""]
  }
}
```

------

### awsiot.greengrasscoreipc.model.UnauthorizedError
<a name="ipc-unauthorized-error"></a>

当 Greengrass 组件无权对资源执行 IPC 操作时，您可能会在组件日志中看到此错误。要授予组件调用 IPC 操作的权限，请在组件配置中定义 IPC 授权策略。有关更多信息，请参阅 [授权组件执行 IPC 操作](interprocess-communication.md#ipc-authorization-policies)。

**提示**  <a name="tip-reset-configuration-to-apply-new-default-configuration"></a>
如果您要更改组件配方中的 `DefaultConfiguration`，则必须将该组件的配置重置为其新的默认配置。部署组件时，请指定一个空字符串作为[重置更新](update-component-configurations.md#reset-configuration-update)。有关更多信息，请参阅 [更改默认配置时不更新组件配置](#update-component-configuration-to-default-configuration)。

### com.aws.greengrass.authorization.exceptions.AuthorizationException: Duplicate policy ID "<id>" for principal "<componentList>"
<a name="ipc-duplicate-authorization-policy-ids"></a>

如果多个 IPC 授权策略（包括核心设备上的所有组件）使用相同的策略 ID，则可能会出现此错误。

检查组件的 IPC 授权策略，修复所有重复项，然后再次尝试。要创建唯一的策略 IDs，我们建议您将组件名称、IPC 服务名称和计数器组合在一起。有关更多信息，请参阅 [授权组件执行 IPC 操作](interprocess-communication.md#ipc-authorization-policies)。

**提示**  <a name="tip-reset-configuration-to-apply-new-default-configuration"></a>
如果您要更改组件配方中的 `DefaultConfiguration`，则必须将该组件的配置重置为其新的默认配置。部署组件时，请指定一个空字符串作为[重置更新](update-component-configurations.md#reset-configuration-update)。有关更多信息，请参阅 [更改默认配置时不更新组件配置](#update-component-configuration-to-default-configuration)。

### com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 400)
<a name="token-exchange-service-credentials-http-400"></a>

当核心设备无法从[令牌交换服务](interact-with-aws-services.md)获取 AWS 凭据时，您可能会看到此错误。HTTP 400 状态代码表示之所以发生此错误，是因为核心设备的[令牌交换 IAM 角色](device-service-role.md)不存在或不存在允许 AWS IoT 凭证提供者担任该角色的信任关系。

执行以下操作：

1. 确定核心设备使用的令牌交换角色。错误消息包括核心设备的 AWS IoT 角色别名，该别名指向令牌交换角色。在开发计算机上运行以下命令，并*MyGreengrassCoreTokenExchangeRoleAlias*替换为错误消息中 AWS IoT 角色别名的名称。

   ```
   aws iot describe-role-alias --role-alias MyGreengrassCoreTokenExchangeRoleAlias
   ```

   响应中包括令牌交换 IAM 角色的 Amazon 资源名称（ARN）。

   ```
   {
     "roleAliasDescription": {
       "roleAlias": "MyGreengrassCoreTokenExchangeRoleAlias",
       "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/MyGreengrassCoreTokenExchangeRoleAlias",
       "roleArn": "arn:aws:iam::123456789012:role/MyGreengrassV2TokenExchangeRole",
       "owner": "123456789012",
       "credentialDurationSeconds": 3600,
       "creationDate": "2021-02-05T16:46:18.042000-08:00",
       "lastModifiedDate": "2021-02-05T16:46:18.042000-08:00"
     }
   }
   ```

1. 检查该角色是否存在。运行以下命令，并*MyGreengrassV2TokenExchangeRole*替换为令牌交换角色的名称。

   ```
   aws iam get-role --role-name MyGreengrassV2TokenExchangeRole
   ```

   如果命令返回 `NoSuchEntity` 错误，则该角色不存在，您必须进行创建。有关如何创建和配置该角色的更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

1. 检查该角色是否具有允许 AWS IoT 凭证提供者担任该角色的信任关系。上一步的响应包含一个 `AssumeRolePolicyDocument`，它定义了角色的信任关系。该角色必须定义一种信任关系，使 `credentials.iot.amazonaws.com` 能够承担该角色。此文档应该类似于以下示例。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "credentials.iot.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

   如果角色的信任关系不允许 `credentials.iot.amazonaws.com` 承担该角色，则必须将此信任关系添加至角色。有关更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)。

### com.aws.greengrass.tes.CredentialRequestHandler: Error in retrieving AwsCredentials from TES (HTTP 403)
<a name="token-exchange-service-credentials-http-403"></a>

当核心设备无法从[令牌交换服务](interact-with-aws-services.md)获取 AWS 凭据时，您可能会看到此错误。HTTP 403 状态代码表示出现此错误是因为核心设备的 AWS IoT 策略未授予核心设备 AWS IoT 角色别名的`iot:AssumeRoleWithCertificate`权限。

查看核心设备的 AWS IoT 策略，然后为核心设备的 AWS IoT 角色别名添加`iot:AssumeRoleWithCertificate`权限。错误消息包括核心设备的当前 AWS IoT 角色别名。有关此权限以及如何更新核心设备 AWS IoT 策略的更多信息，请参阅[AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)和[更新核心设备的 AWS IoT 政策](device-auth.md#update-core-device-iot-policy)。

### com.aws.greengrass.tes.CredentialsProviderError: Could not load credentials from any providers
<a name="token-exchange-service-credentials-provider-error"></a>

当组件尝试请求 AWS 凭据但无法连接到[令牌交换服务](interact-with-aws-services.md)时，您可能会看到此错误。

执行以下操作：
+ 检查该组件是否声明了令牌交换服务组件 `aws.greengrass.TokenExchangeService` 的依赖关系。如果没有，请添加依赖关系并重新部署组件。
+ 如果该组件在 Docker 中运行，请确保根据 [在 Docker 容器组件中使用 AWS 凭证 (Linux)](run-docker-container.md#docker-container-token-exchange-service) 应用正确的网络设置和环境变量。
+ [如果组件是用 NodeJS 编写的，请设置 dns。 setDefaultResult订购](https://nodejs.org/docs/latest/api/dns.html#dnssetdefaultresultorderorder)到**ipv4first**。
+ 检查 `/etc/hosts` 是否有以 `::1` 开头并包含 `localhost` 的条目。移除该条目以查看它是否导致组件通过错误地址连接到令牌交换服务。

### Received error when attempting to retrieve ECS metadata: Could not connect to the endpoint URL: "<tokenExchangeServiceEndpoint>"
<a name="token-exchange-service-not-running"></a>

当组件未运行[令牌交换服务](interact-with-aws-services.md)并且某个组件尝试请求 AWS 凭据时，您可能会看到此错误。

执行以下操作：
+ 检查该组件是否声明了令牌交换服务组件 `aws.greengrass.TokenExchangeService` 的依赖关系。如果没有，请添加依赖关系并重新部署组件。
+ 检查组件是否在其`install`生命周期中使用 AWS 证书。 AWS IoT Greengrass 并不能保证代币交换服务在`install`生命周期中的可用性。更新组件以将使用 AWS 凭证的代码移至 `startup` 或 `run` 生命周期，然后重新部署该组件。

### copyFrom: <configurationPath> is already a container, not a leaf
<a name="configuration-key-is-container-cannot-become-leaf"></a>

当您将配置值从容器类型（列表或对象）更改为非容器类型（字符串、数字或布尔值）时，可能会出现此错误。执行以下操作：

1. 检查组件的配方，查看其默认配置是否将配置值设置为列表或对象。如果是，请移除或更改该配置值。

1. 创建部署以将配置值重置为其默认值。有关更多信息，请参阅[创建部署](create-deployments.md)和[更新组件配置](update-component-configurations.md)。

然后，您可以将该配置值设置为字符串、数字或布尔值。

### com.aws.greengrass.componentmanager.plugins.docker.exceptions.DockerLoginException: Error logging into the registry using credentials - 'The stub received bad data.'
<a name="docker-login-stub-received-bad-data"></a>

当 [Docker 应用程序管理器组件](docker-application-manager-component.md)尝试从 Amazon Elastic Container Registry（Amazon ECR）的私有存储库下载 Docker 映像时，您可能会在 Greengrass Nucleus 日志中看到这个错误。如果您使用 `wincred` [Docker 凭证助手](https://github.com/docker/docker-credential-helpers) (`docker-credential-wincred`)，则会发生此错误。因此，Amazon ECR 无法存储登录凭证。

执行下列操作之一：
+ 如果您不使用 `wincred` Docker 凭证助手，请从核心设备中移除 `docker-credential-wincred` 程序。
+ 如果您使用 `wincred` Docker 凭证助手，请执行以下操作：

  1. 在核心设备上重命名 `docker-credential-wincred` 程序。将 `wincred` 替换为 Windows Docker 凭证助手的新名称。例如，您可以将其重命名为 `docker-credential-wincredreal`。

  1. 更新 Docker 配置文件 (`.docker/config.json`) 中的 `credsStore` 选项，以使用 Windows Docker 凭证助手的新名称。例如，如果您将程序重命名为 `docker-credential-wincredreal`，则将 `credsStore` 选项更新为 `wincredreal`。

     ```
     {
       "credsStore": "wincredreal"
     }
     ```

### java.io.IOException: Cannot run program "cmd" ...: [LogonUser] The password for this account has expired.
<a name="windows-account-password-expired"></a>

当运行组件进程（例如 `ggc_user`）的系统用户密码已过期时，您可能会在 Windows 核心设备上看到此错误。因此， AWS IoT Greengrass Core 软件无法以该系统用户的身份运行组件进程。

**更新 Greengrass 系统用户的密码**

1. 以管理员身份运行以下命令来设置用户的密码。*ggc\$1user*替换为系统用户，然后*password*替换为要设置的密码。

   ```
   net user ggc_user password
   ```

1. 使用该[PsExec 实用程序](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)将用户的新密码存储在 LocalSystem 账户的凭据管理器实例中。*password*替换为您设置的用户密码。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

**提示**  <a name="windows-password-expiration-tip"></a>
根据您的 Windows 配置，用户密码可能会设置为在将来某个日期过期。为确保您的 Greengrass 应用程序继续运行，请跟踪密码过期时间，并在密码过期之前对其进行更新。您还可以将用户的密码设置为永不过期。  
要检查用户及其密码的过期时间，请运行以下命令。  

  ```
  net user ggc_user | findstr /C:expires
  ```
要将用户密码设置为永不过期，请运行以下命令。  

  ```
  wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
  ```
如果你使用的是[已弃用该`wmic`命令的](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 或更高版本，请运行以下 PowerShell 命令。  

  ```
  Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
  ```

### aws.greengrass.StreamManager: Instant exceeds minimum or maximum instant
<a name="stream-manager-instant-exceeds-maximun-minimum"></a>

当您将流管理器 v2.0.7 升级至 v2.0.8 和 v2.0.11 之间的版本时，如果组件无法启动，您可能会在流管理器组件的日志中看到以下错误。

```
2021-07-16T00:54:58.568Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: com.fasterxml.jackson.databind.JsonMappingException: Instant exceeds minimum or maximum instant (through reference chain: com.amazonaws.iot.greengrass.streammanager.export.PersistedSuccessExportStatesV1["lastExportTime"]). {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING}
2021-07-16T00:54:58.579Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: java.time.DateTimeException: Instant exceeds minimum or maximum instant. {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING}
```

如果您部署了流管理器 v2.0.7，并且想要升级到更高版本，则必须直接升级至流管理器 v2.0.12。有关流管理器组件的更多信息，请参阅[流管理器](stream-manager-component.md)。

## 核心设备 Lambda 函数组件问题
<a name="greengrass-core-lambda-function-issues"></a>

排查核心设备上的 Lambda 函数组件问题。

**Topics**
+ [The following cgroup subsystems are not mounted: devices, memory](#lambda-cgroups-not-mounted)
+ [ipc\$1client.py:64,HTTP Error 400:Bad Request, b'No subscription exists for the source <label-or-lambda-arn> and subject <label-or-lambda-arn>](#v1-lambda-no-subscription-exists)

### The following cgroup subsystems are not mounted: devices, memory
<a name="lambda-cgroups-not-mounted"></a>

当您在以下情况下运行容器化 Lambda 函数时，可能会出现此错误：
+ 核心设备没有为内存或设备 cgroups 启用 cgroup v1。
+ 核心设备启用了 cgroups v2。Greengrass Lambda 函数需要 cgroups v1，而 cgroups v1 和 v2 是互斥的。

要启用这些 cgroups v1，请使用以下 Linux 内核参数启动设备。

```
cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
```

**提示**  
在 Raspberry Pi 上，编辑 `/boot/cmdline.txt` 文件以设置设备的内核参数。

### ipc\$1client.py:64,HTTP Error 400:Bad Request, b'No subscription exists for the source <label-or-lambda-arn> and subject <label-or-lambda-arn>
<a name="v1-lambda-no-subscription-exists"></a>

当您在 V2 核心设备上运行使用 AWS IoT Greengrass Core SDK 的 V1 Lambda 函数，而没有在[旧版](legacy-subscription-router-component.md)订阅路由器组件中指定订阅时，您可能会看到此错误。要解决此问题，请部署和配置旧版订阅路由器以指定所需订阅。有关更多信息，请参阅 [导入 V1 Lambda 函数](set-up-v2-test-device.md#run-v1-lambda-functions)。

## 组件版本已停用
<a name="discontinued-component-version"></a>

如果核心设备上的某个组件版本停用，您可能会在 Personal Health Dashboard（PHD）上看到通知。组件版本将在停用后的 60 分钟内将此通知发送给您的 PHD。

要查看需要修改哪些部署，请使用 AWS Command Line Interface执行以下操作：

1. 运行以下命令以获取核心设备列表。

   ```
   aws greengrassv2 list-core-devices
   ```

1. 运行以下命令，以检索步骤 1 中每台核心设备上组件的状态。将 `coreDeviceName` 替换为要查询的每台核心设备的名称。

   ```
   aws greengrassv2 list-installed-components --core-device-thing-name coreDeviceName
   ```

1. 收集之前步骤中已安装停用组件版本的核心设备。

1. 运行以下命令，以检索步骤 3 中每台核心设备的所有部署作业状态。将 `coreDeviceName` 替换为要查询的核心设备的名称。

   ```
   aws greengrassv2 list-effective-deployments --core-device-thing-name coreDeviceName
   ```

   响应包含核心设备的部署作业列表。您可以修改部署以选择其他组件版本。有关如何修改部署的更多信息，请参阅[修改部署](https://docs.aws.amazon.com/greengrass/v2/developerguide/revise-deployments.html)。

## Greengrass 命令行界面问题
<a name="greengrass-cli-issues"></a>

排查 [Greengrass CLI](gg-cli.md) 的问题。

**Topics**
+ [java.lang.RuntimeException: Unable to create ipc client](#greengrass-cli-unable-to-create-ipc-client)

### java.lang.RuntimeException: Unable to create ipc client
<a name="greengrass-cli-unable-to-create-ipc-client"></a>

当您运行 Greengrass CLI 命令并指定与安装核心软件的根文件夹不同的根文件夹时，您可能会看到此错误。 AWS IoT Greengrass 

执行以下任一操作来设置根路径，并`/greengrass/v2`替换为 AWS IoT Greengrass Core 软件安装路径：<a name="greengrass-cli-set-root-path"></a>
+ 将 `GGC_ROOT_PATH` 环境变量设置为 `/greengrass/v2`。
+ 将 `--ggcRootPath /greengrass/v2` 参数添加到您的命令中，如以下示例所示。

  ```
  greengrass-cli --ggcRootPath /greengrass/v2 <command> <subcommand> [arguments]
  ```

## AWS Command Line Interface 问题
<a name="aws-cli-issues"></a>

对 AWS CLI 的问题进行故障排除 AWS IoT Greengrass V2。

**Topics**
+ [Error: Invalid choice: 'greengrassv2'](#aws-cli-invalid-choice-greengrassv2)

### Error: Invalid choice: 'greengrassv2'
<a name="aws-cli-invalid-choice-greengrassv2"></a>

当你使用运行 AWS IoT Greengrass V2 命令时 AWS CLI （例如，`aws greengrassv2 list-core-devices`），你可能会看到这个错误。

此错误表示您的版本 AWS CLI 不支持 AWS IoT Greengrass V2。要 AWS IoT Greengrass V2 与一起使用 AWS CLI，您必须拥有以下版本之一或更高版本：<a name="minimum-aws-cli-versions"></a>
+  AWS CLI V1 最低版本：v1.18.197
+  AWS CLI V2 最低版本：v2.1.11

**提示**  <a name="tip-check-aws-cli-version"></a>
你可以运行以下命令来检查你拥有 AWS CLI 的版本。  

```
aws --version
```

要解决此问题，请将更新 AWS CLI 到支持的更高版本 AWS IoT Greengrass V2。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装、更新和卸载 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

# 详细的部署错误代码
<a name="troubleshooting-deployment"></a>

使用 Greengrass Nucleus 版本 2.8.0 或更高版本时，用这些部分中的错误代码和解决方案来帮助解决组件部署问题。

Greengrass Nucleus 会按照层级结构报告部署错误，从最不具体的错误代码到最具体的错误代码逐层呈现。您可以使用此层次结构来帮助查明部署错误的原因。例如，以下是可能出现的层次结构错误。
+ DEPLOYMENT\$1FAILURE
  + ARTIFACT\$1DOWNLOAD\$1ERROR
    + IO\$1ERROR
      + DISK\$1SPACE\$1CRITICAL

错误代码按类型进行组织。每种类型都代表可能发生的一类错误。 AWS IoT Greengrass 在控制台、API 和中报告这些错误类型 AWS CLI。可能有多种错误类型，具体取决于错误层次结构中报告的错误。对于前面的示例，返回的错误类型为 `DEVICE_ERROR`。

错误类型包括：
+ **PERMISSION\$1ERROR** – 访问需要许可的操作被拒绝。
+ **REQUEST\$1ERROR** – 由于部署文档中的问题而出错。
+ **COMPONENT\$1RECIPE\$1ERROR** – 由于组件配方中的问题而出错。
+ **AWS\$1COMPONENT\$1ERROR** — 启动或移除 AWS 提供的组件时出错。
+ **USER\$1COMPONENT\$1ERROR** – 启动或移除用户组件时出错。
+ **COMPONENT\$1ERROR** – 启动或移除组件时出错，但是 Greengrass Nucleus 无法确定该组件是 AWS 提供的组件还是用户组件。
+ **DEVICE\$1** ERROR — 发生本地 I/O 或其他设备错误时出错。
+ **DEPENDENCY\$1ERROR** – 部署未能从 Amazon S3 下载构件或从 ECR 注册表中提取映像。
+ **HTTP\$1ERROR** – HTTP 请求出错。
+ **NETWORK\$1ERROR** – 设备网络出错。
+ **NUCLEUS\$1ERROR** – Greengrass Nucleus 找不到组件或找不到处于活动状态的 Nucleus 版本。
+ **SERVER\$1ERROR** – 服务器在响应请求时返回了 500 错误。
+ **CLOUD\$1SERVICE\$1ERROR** – AWS IoT Greengrass 云服务出错。
+ **UNKNOWN\$1ERROR** – 组件抛出未经检查的异常。

本节中的许多错误都会在 C AWS IoT Greengrass ore 日志中报告其他信息。这些日志存储在核心设备的本地文件系统中。有 AWS IoT Greengrass 核心软件和每个单独组件的日志。有关访问日志的信息，请参阅[访问文件系统日志](monitor-logs.md#access-local-logs)。

## 权限错误
<a name="permission-error"></a>

ACCESS\$1DENIED  
当 AWS 服务操作因权限设置不正确而返回 403 错误时，您可能会遇到此错误。有关详细信息，请查看更具体的错误代码。

GET\$1DEPLOYMENT\$1CONFIGURATION\$1ACCESS\$1DENIED  
当 AWS IoT 策略不允许调用`GetDeploymentConfiguration`操作时，您可能会收到此错误。将 `greengrass::GetDeploymentConfiguration` 权限添加到核心设备的策略中。

GET\$1COMPONENT\$1VERSION\$1ARTIFACT\$1ACCESS\$1DENIED  
当核心设备 AWS IoT 策略不允许该`greengrass:GetComponentVersionArtifact`权限时，您可能会收到此错误。将权限添加到核心设备的策略中。

RESOLVE\$1COMPONENT\$1CANDIDATES\$1ACCESS\$1DENIED  
当核心设备 AWS IoT 策略不允许该`greengrass:ResolveComponentCandidates`权限时，您可能会收到此错误。将权限添加到核心设备的策略中。

GET\$1ECR\$1CREDENTIAL\$1ERROR  
当部署无法使用 ECR 中的私有注册表进行身份验证时，可能会出现此错误。检查日志中是否存在具体错误，然后再次尝试部署。

USER\$1NOT\$1AUTHORIZED\$1FOR\$1DOCKER  
当 Greengrass 用户无权使用 Docker 时，可能会出现此错误。确保以根用户身份运行 Greengrass，或将用户添加到 `docker` 组中。然后再次尝试部署。

S3\$1ACCESS\$1DENIED  
当 Amazon S3 操作返回 403 错误时，可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

S3\$1HEAD\$1OBJECT\$1ACCESS\$1DENIED  
如果设备的令牌交换角色不允许 AWS IoT Greengrass Core 软件从您在组件配方中指定的 S3 对象 URL 下载组件构件，或该组件构件不可用，则可能会出现此错误。检查令牌交换角色是否允许 `s3:GetObject` 使用该构件可用的 S3 对象 URL 以及该构件是否存在。

S3\$1GET\$1BUCKET\$1LOCATION\$1ACCESS\$1DENIED  
当设备的令牌交换角色不允许对构件可用的 Amazon S3 存储桶授予 `s3:GetBucketLocation` 权限时，可能会出现此错误。检查设备是否允许该权限，然后再次尝试部署。

S3\$1GET\$1OBJECT\$1ACCESS\$1DENIED  
如果设备的令牌交换角色不允许 AWS IoT Greengrass Core 软件从您在组件配方中指定的 S3 对象 URL 下载组件构件，或该组件构件不可用，则可能会出现此错误。检查令牌交换角色是否允许 `s3:GetObject` 使用该构件可用的 S3 对象 URL 以及该构件是否存在。

## 请求错误
<a name="request-error"></a>

NUCLEUS\$1MISSING\$1REQUIRED\$1CAPABILITIES  
当部署中的 Nucleus 版本无法执行请求的操作（例如下载大型配置或设置 Linux 资源限制）时，可能会出现此错误。使用支持该操作的 Nucleus 版本重新尝试部署。

MULTIPLE\$1NUCLEUS\$1RESOLVED\$1ERROR  
若尝试部署多个 Nucleus 组件，则可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

COMPONENT\$1CIRCULAR\$1DEPENDENCY\$1ERROR  
当部署中的两个组件相互依赖时，可能会出现此错误。修改组件设置，使部署中的组件不相互依赖。

UNAUTHORIZED\$1NUCLEUS\$1MINOR\$1VERSION\$1UPDATE  
当部署中的组件需要更新 Nucleus 次要版本，但部署中未指定该版本时，可能会出现此错误。这有助于减少依赖于不同版本的组件的次要版本意外更新。在部署中加入 Nucleus 的新次要版本。

MISSING\$1DOCKER\$1APPLICATION\$1MANAGER  
在未部署 Docker 应用程序管理器的情况下部署 Docker 组件时，可能会出现此错误。确保您的部署包含 Docker 应用程序管理器。

MISSING\$1TOKEN\$1EXCHANGE\$1SERVICE  
若部署时想要在不部署令牌交换服务的情况下从私有 ECR 注册表下载 Docker 映像构件，则可能会出现此错误。确保您的部署包括令牌交换服务。

COMPONENT\$1VERSION\$1REQUIREMENTS\$1NOT\$1MET  
当存在版本约束冲突或组件版本不存在时，可能会出现此错误。有关更多信息，请参阅 [Error: com.aws.greengrass.componentmanager.exceptions.NoAvailableComponentVersionException: Failed to negotiate component <name> version with cloud and no local applicable version satisfying requirement <requirements>](troubleshooting.md#core-error-no-available-component-version)。

THROTTLING\$1ERROR  
当 AWS 服务操作超过速率配额时，可能会出现此错误。重试部署。

CONFLICTED\$1REQUEST  
当 AWS 服务操作返回 409 错误时，您可能会收到此错误，因为您的部署正在尝试一次执行多个操作。重试部署。

RESOURCE\$1NOT\$1FOUND  
当 AWS 服务操作因找不到资源而返回 404 错误时，您可能会遇到此错误。检查日志中是否有资源缺失。

RUN\$1WITH\$1CONFIG\$1NOT\$1VALID  
当为运行组件而指定的 `posixUser`、`posixGroup` 或 `windowsUser` 信息无效时，可能会出现此错误。检查用户是否有效，然后重新尝试部署。

UNSUPPORTED\$1REGION  
当 AWS IoT Greengrass不支持为部署指定的区域时，可能会出现此错误。检查该区域，然后再次尝试部署。

IOT\$1CRED\$1ENDPOINT\$1NOT\$1VALID  
当配置中指定的 AWS IoT 凭证端点无效时，可能会出现此错误。检查端点并重新尝试发送您的请求。

IOT\$1DATA\$1ENDPOINT\$1NOT\$1VALID  
当配置中指定的 AWS IoT 数据端点无效时，可能会出现此错误。检查端点并重新尝试发送您的请求。

S3\$1HEAD\$1OBJECT\$1RESOURCE\$1NOT\$1FOUND  
当组件构件在组件配方中指定的 S3 对象 URL 中不可用时，可能会出现此错误。检查您是否已将构件上传至 S3 存储桶，以及构件 URI 是否与存储桶中构件的 S3 对象 URL 相匹配。

S3\$1GET\$1BUCKET\$1LOCATION\$1RESOURCE\$1NOT\$1FOUND  
当找不到 Amazon S3 存储桶时，可能会出现此错误。检查存储桶是否存在，然后再次尝试部署。

S3\$1GET\$1OBJECT\$1RESOURCE\$1NOT\$1FOUND  
当组件构件在组件配方中指定的 S3 对象 URL 中不可用时，可能会出现此错误。检查您是否已将构件上传至 S3 存储桶，以及构件 URI 是否与存储桶中构件的 S3 对象 URL 相匹配。

IO\$1MAPPING\$1ERROR  
当解析部署文档或配方时出现 I/O 错误时，您可能会收到此错误。有关详细信息，请查看任何其它错误代码或日志。

## 组件配方错误
<a name="component-recipe-error"></a>

RECIPE\$1PARSE\$1ERROR  
当由于配方结构存在错误而无法解析部署配方时，可能会出现此错误。检查配方格式是否正确，然后再次尝试部署。

RECIPE\$1METADATA\$1PARSE\$1ERROR  
当无法解析从云端下载的部署配方元数据时，可能会出现此错误。联系我们 支持。

ARTIFACT\$1URI\$1NOT\$1VALID  
如果配方中的构件 URI 格式不正确，则可能会出现此错误。检查日志中是否存在无效的 URI，更新配方中的 URI，然后再次尝试部署。

S3\$1ARTIFACT\$1URI\$1NOT\$1VALID  
当配方中某个构件的 Amazon S3 URI 无效时，可能会出现此错误。检查日志中是否存在无效的 URI，更新配方中的 URI，然后再次尝试部署。

DOCKER\$1ARTIFACT\$1URI\$1NOT\$1VALID  
当配方中某个构件的 Docker URI 无效时，可能会出现此错误。检查日志中是否存在无效的 URI，更新配方中的 URI，然后再次尝试部署。

EMPTY\$1ARTIFACT\$1URI  
如果配方中未指定构件 URI，则可能会出现此错误。检查日志中缺少 URI 的构件，更新配方中的 URI，然后再次尝试部署。

EMPTY\$1ARTIFACT\$1SCHEME  
如果没有为构件定义 URI 方案，则可能会出现此错误。检查日志中是否存在无效的 URI，更新配方中的 URI，然后再次尝试部署。

UNSUPPORTED\$1ARTIFACT\$1SCHEME  
当正在运行的 Nucleus 版本不支持 URI 方案时，可能会出现此错误。要么 URI 无效，要么需要更新 Nucleus 版本。如果 URI 无效，请检查日志中是否存在无效的 URI，更新配方中的 URI，然后再次尝试部署。

RECIPE\$1MISSING\$1MANIFEST  
如果配方中未包含清单部分，则可能会出现此错误。将清单添加到配方中，然后再次尝试部署。

RECIPE\$1MISSING\$1ARTIFACT\$1HASH\$1ALGORITHM  
如果在没有哈希算法的配方中指定了非本地构件，则可能会出现此错误。将算法添加到构件中，然后再次尝试请求。

ARTIFACT\$1CHECKSUM\$1MISMATCH  
当下载的构件的摘要与配方中指定的摘要不同时，可能会出现此错误。确保配方包含正确的摘要，然后再次尝试部署。有关更多信息，请参阅 [Error: com.aws.greengrass.componentmanager.exceptions.ArtifactChecksumMismatchException: Integrity check for downloaded artifact failed. Probably due to file corruption.](troubleshooting.md#core-error-failed-to-download-artifact-checksum-mismatch-exception)。

COMPONENT\$1DEPENDENCY\$1NOT\$1VALID  
当部署配方中指定的依赖关系类型无效时，可能会出现此错误。检查配方，然后再次尝试请求。

CONFIG\$1INTERPOLATE\$1ERROR  
插值配方变量时可能会出现此错误。有关详细信息，请查看日志。

IO\$1MAPPING\$1ERROR  
当解析部署文档或配方时出现 I/O 错误时，您可能会收到此错误。有关详细信息，请查看任何其它错误代码或日志。

## AWS 组件错误、用户组件错误、组件错误
<a name="component-error"></a>

当组件出现问题时，会返回以下错误代码。报告的实际错误类型取决于引发错误的特定组件。如果 Greengrass 核将该组件标识为由提供的组件，则它会返回。 AWS IoT Greengrass`AWS_COMPONENT_ERROR`如果该组件被标识为用户组件，则 Greengrass Nucleus 返回 `USER_COMPONENT_ERROR`。如果 Greengrass Nucleus 无法分辨，则会返回 `COMPONENT_ERROR`。

COMPONENT\$1UPDATE\$1ERROR  
如果组件在部署期间未更新，则可能会出现此错误。检查任何其它错误代码或查看日志以了解导致错误的原因。

COMPONENT\$1BROKEN  
如果组件在部署过程中损坏，则可能会出现此错误。查看组件日志，了解错误详情，然后再次尝试部署。

REMOVE\$1COMPONENT\$1ERROR  
如果 Nucleus 在部署期间无法移除组件，则可能会出现此错误。查看日志，了解错误详情，然后再次尝试部署。

COMPONENT\$1BOOTSTRAP\$1TIMEOUT  
当组件的引导任务花费的时间超过配置的超时时间时，可能会出现此错误。延长超时时间或缩短引导任务的执行时间，然后再次尝试部署。

COMPONENT\$1BOOTSTRAP\$1ERROR  
当组件的引导任务出现错误时，可能会出现此错误。查看日志，了解错误详情，然后再次尝试部署。

COMPONENT\$1CONFIGURATION\$1NOT\$1VALID  
当 Nucleus 无法验证组件的已部署配置时，可能会出现此错误。查看日志，了解错误详情，然后再次尝试部署。

## 设备错误
<a name="device-error"></a>

IO\$1WRITE\$1ERROR  
写入文件时可能会出现此错误。有关详细信息，请查看日志。

IO\$1READ\$1ERROR  
读取文件时可能会出现此错误。有关详细信息，请查看日志。

DISK\$1SPACE\$1CRITICAL  
当磁盘空间不足以完成部署请求时，可能会出现此错误。您必须有至少 20 MB 的可用空间，或者足以容纳更大构件的可用空间。释放一些磁盘空间，然后重新尝试部署。

IO\$1FILE\$1ATTRIBUTE\$1ERROR  
当无法从文件系统中检索现有文件大小时，可能会出现此错误。有关详细信息，请查看日志。

SET\$1PERMISSION\$1ERROR  
当无法对已下载的构件或构件目录设置权限时，可能会出现此错误。有关详细信息，请查看日志。

IO\$1UNZIP\$1ERROR  
当无法解压缩构件时，可能会出现此错误。有关详细信息，请查看日志。

LOCAL\$1RECIPE\$1NOT\$1FOUND  
当找不到配方文件的本地副本时，可能会出现此错误。再次尝试部署。

LOCAL\$1RECIPE\$1CORRUPTED  
如果配方的本地副本在下载后发生了变更，则可能会出现此错误。删除配方的现有副本，然后再次尝试部署。

LOCAL\$1RECIPE\$1METADATA\$1NOT\$1FOUND  
当找不到配方元数据文件的本地副本时，可能会出现此错误。再次尝试部署。

LAUNCH\$1DIRECTORY\$1CORRUPTED  
如果用于启动 Greengrass Nucleus (`/greengrass/v2/alts/current`) 的目录自上次启动 Nucleus 以来已被修改，则可能会出现此错误。重启 Nucleus，然后重新尝试部署。

HASHING\$1ALGORITHM\$1UNAVAILABLE  
当设备的 Java 发行版不支持所需的哈希算法或组件配方中指定的哈希算法无效时，可能会出现此错误。

DEVICE\$1CONFIG\$1NOT\$1VALID\$1FOR\$1ARTIFACT\$1DOWNLOAD  
如果设备配置中出现错误导致部署无法从 Amazon S3 或 Greengrass 云下载构件，则可能会出现此错误。检查日志中是否存在具体配置错误，然后重新尝试部署。

## 依赖关系错误
<a name="dependency-error"></a>

DOCKER\$1ERROR  
拉取 Docker 映像时可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

DOCKER\$1SERVICE\$1UNAVAILABLE  
Greengrass 无法登录 Docker 注册表时可能会出现此错误。检查日志中是否存在具体错误，然后再次尝试部署。

DOCKER\$1LOGIN\$1ERROR  
登录 Docker 时发生意外错误则可能会出现此错误。检查日志中是否存在具体错误，然后再次尝试部署。

DOCKER\$1PULL\$1ERROR  
从注册表中提取 Docker 映像时若发生意外错误，则可能会出现此错误。检查日志中是否存在具体错误，然后再次尝试部署。

DOCKER\$1IMAGE\$1NOT\$1VALID  
当请求的 Docker 映像不存在时，可能会出现此错误。检查日志中是否存在具体错误，并再次尝试部署。

DOCKER\$1IMAGE\$1QUERY\$1ERROR  
若查询 Docker 以获取可用映像时发生意外故障，则可能会出现此错误。检查日志中是否存在具体错误，并再次尝试部署。

S3\$1ERROR  
下载 Amazon S3 构件时可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

S3\$1RESOURCE\$1NOT\$1FOUND  
当 Amazon S3 操作返回 404 错误时，可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

S3\$1BAD\$1REQUEST  
当 Amazon S3 操作返回 400 错误时，可能会出现此错误。检查日志中是否存在具体错误，并再次尝试请求。

## HTTP 错误
<a name="http-error"></a>

HTTP\$1REQUEST\$1ERROR  
若进行 HTTP 请求时发生错误，则可能会出现此错误。检查日志中是否存在具体错误。

DOWNLOAD\$1DEPLOYMENT\$1DOCUMENT\$1ERROR  
若下载部署文档时出现 HTTP 错误，则可能会出现此错误。检查日志中是否存在具体 HTTP 错误。

GET\$1GREENGRASS\$1ARTIFACT\$1SIZE\$1ERROR  
若获取公有组件构件的大小时出现 HTTP 错误，则可能会出现此错误。检查日志中是否存在具体 HTTP 错误。

DOWNLOAD\$1GREENGRASS\$1ARTIFACT\$1ERROR  
若下载公有组件构件时出现 HTTP 错误，则可能会出现此错误。检查日志中是否存在具体 HTTP 错误。

## 网络错误
<a name="network-error"></a>

NETWORK\$1ERROR  
部署期间出现连接问题时，可能会出现此错误。检查设备与互联网的连接，然后再次尝试部署。

## Nucleus 错误
<a name="nucleus-error"></a>

BAD\$1REQUEST  
当 AWS 云操作返回 400 错误时，您可能会收到此错误。查看日志以查看哪个 API 导致了错误，然后查看 nucleus 软件更新页面，看看问题是否已在更高版本的 nucleus 中得到纠正，或者请联系。 支持

NUCLEUS\$1VERSION\$1NOT\$1FOUND  
当核心设备找不到处于活动状态的 Nucleus 版本时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

NUCLEUS\$1RESTART\$1FAILURE  
在任何需要重启 Nucleus 的部署过程中，如果 Nucleus 没有重启，则可能会出现此错误。查看加载程序日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

INSTALLED\$1COMPONENT\$1NOT\$1FOUND  
当 Nucleus 找不到已安装的组件时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1DOCUMENT\$1NOT\$1VALID  
当设备收到无效的部署文档时，可能会出现此错误。检查任何其它错误代码或查看日志以了解导致错误的原因。

EMPTY\$1DEPLOYMENT\$1REQUEST  
当设备收到空部署请求时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1DOCUMENT\$1PARSE\$1ERROR  
当部署请求格式与预期格式不匹配时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

COMPONENT\$1METADATA\$1NOT\$1VALID\$1IN\$1DEPLOYMENT  
当部署请求包含无效的组件元数据时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

LAUNCH\$1DIRECTORY\$1CORRUPTED  
当您将 Greengrass 设备从一个事物组移动到另一个事物组，然后再移回需要重启 Greengrass 的原部署组时，可能会出现此错误。要纠正该错误，请在设备上重新创建 Greengrass 的启动目录。  
有关更多信息，请参阅 [Error: com.aws.greengrass.deployment.exceptions.DeploymentException: Unable to process deployment. Greengrass launch directory is not set up or Greengrass is not set up as a system service](troubleshooting.md#deployment-error-unable-to-process-deployment)。

## 服务器错误
<a name="server-error"></a>

SERVER\$1ERROR  
当 AWS 服务操作返回 500 错误时，您可能会收到此错误，因为该服务现在无法处理该请求。请稍后重新尝试部署。

S3\$1SERVER\$1ERROR  
当 Amazon S3 操作返回 500 错误时，可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

## 云服务错误
<a name="cloud-service-error"></a>

RESOLVE\$1COMPONENT\$1CANDIDATES\$1BAD\$1RESPONSE  
当 Greengrass 云服务向 `ResolveComponentCandidates` 操作发送不兼容的响应时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1DOCUMENT\$1SIZE\$1EXCEEDED  
当请求的部署文档超过最大大小配额时，可能会出现此错误。缩小部署文档的大小，然后再次尝试部署。

GREENGRASS\$1ARTIFACT\$1SIZE\$1NOT\$1FOUND  
若 Greengrass 无法获取公有组件构件的大小，则可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1DOCUMENT\$1NOT\$1VALID  
当设备收到无效的部署文档时，可能会出现此错误。检查任何其它错误代码或查看日志以了解导致错误的原因。

EMPTY\$1DEPLOYMENT\$1REQUEST  
当设备收到空部署请求时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1DOCUMENT\$1PARSE\$1ERROR  
当部署请求格式与预期格式不匹配时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

COMPONENT\$1METADATA\$1NOT\$1VALID\$1IN\$1DEPLOYMENT  
当部署请求包含无效的组件元数据时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

## 一般错误
<a name="generic-error"></a>

这类一般错误没有相关的错误类型。

DEPLOYMENT\$1INTERRUPTED  
若由于 Nucleus 关闭或其他外部事件而无法完成部署时，则可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

ARTIFACT\$1DOWNLOAD\$1ERROR  
如果下载构件时出现问题，则可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

NO\$1AVAILABLE\$1COMPONENT\$1VERSION  
如果云端或本地不存在组件版本，或者存在依赖关系解析冲突，则可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

COMPONENT\$1PACKAGE\$1LOADING\$1ERROR  
如果处理下载的构件时出错，则可能会出现此错误。有关详细信息，请查看任何其它错误代码或日志。

云\$1 API\$1ERROR  
调用 AWS 服务 API 时发生错误时，您可能会收到此错误。有关详细信息，请查看任何其它错误代码或日志。

IO\$1ERROR  
部署期间发生错误时，您可能会收到此 I/O 错误。有关详细信息，请查看任何其它错误代码或日志。

COMPONENT\$1UPDATE\$1ERROR  
如果组件在部署期间未更新，则可能会出现此错误。检查任何其它错误代码或查看日志以了解导致错误的原因。

## 未知错误
<a name="unknown-error"></a>

DEPLOYMENT\$1FAILURE  
当由于抛出未经检查的异常而导致部署失败时，可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

DEPLOYMENT\$1TYPE\$1NOT\$1VALID  
部署类型无效时可能会出现此错误。查看日志，了解导致错误的原因，然后查看 Nucleus 软件更新页面，了解该问题是否已在更高版本的 Nucleus 中得到纠正，或者请联系 支持。

# 详细的组件状态代码
<a name="troubleshooting-component"></a>

使用 Greengrass Nucleus 版本 2.8.0 或更高版本时，用这些部分中的状态代码和解决方案来帮助解决组件问题。

本主题中的许多状态都会在 AWS IoT Greengrass Core 日志中报告其他信息。这些日志存储在核心设备的本地文件系统中。每个单独组件都有日志。有关访问日志的信息，请参阅[访问文件系统日志](monitor-logs.md#access-local-logs)。

INSTALL\$1ERROR  
若运行安装脚本时发生错误，则可能会出现此错误。组件日志中报告了错误代码。检查安装脚本是否存在错误，然后重新部署您的组件。

INSTALL\$1CONFIG\$1NOT\$1VALID  
由于配方的 `install` 部分无效而无法完成组件的安装时，可能会出现此错误。检查配方中的安装部分是否存在错误，然后重新尝试部署。

INSTALL\$1IO\$1ERROR  
若组件安装过程中出现 I/O 错误，则可能会出现此错误。检查组件错误日志，了解有关错误的详细信息。

INSTALL\$1MISSING\$1DEFAULT\$1RUNWITH  
AWS IoT Greengrass 安装组件时若无法确定要使用的用户或组，则可能会出现此错误。请检查并确保安装配方的 `runWith` 部分包含有效的用户或组。

INSTALL\$1TIMEOUT  
如果安装脚本未在配置的超时时间内完成，则可能会出现此错误。请延长配方 `install` 部分中指定的 `Timeout` 时间或修改安装脚本，使其在配置的超时时间内完成。

STARTUP\$1ERROR  
若运行启动脚本时发生错误，则可能会出现此错误。组件日志中报告了错误代码。检查安装脚本是否存在错误，然后重新部署您的组件。

STARTUP\$1CONFIG\$1NOT\$1VALID  
由于配方的 `startup` 部分无效而无法完成组件的安装时，可能会出现此错误。检查配方中的启动部分是否存在错误，然后重新尝试部署。

STARTUP\$1IO\$1ERROR  
若组件启动过程中出现 I/O 错误，则可能会出现此错误。检查组件错误日志，了解有关错误的详细信息。

STARTUP\$1MISSING\$1DAULT\$1RUNWITH  
AWS IoT Greengrass 运行组件时若无法确定要使用的用户或组，则可能会出现此错误。请检查并确保启动配方的 `runWith` 部分包含有效的用户或组。

STARTUP\$1TIMEOUT  
如果启动脚本未在配置的超时时间内完成，则可能会出现此错误。请延长配方 `startup` 部分中指定的 `Timeout` 时间或修改启动脚本，使其在配置的超时时间内完成。

RUN\$1ERROR  
若运行组件脚本时发生错误，则可能会出现此错误。组件日志中报告了错误代码。检查运行脚本是否存在错误，然后重新部署您的组件。

RUN\$1MISSING\$1DEFAULT\$1RUNWITH  
AWS IoT Greengrass 运行组件时若无法确定要使用的用户或组，则可能会出现此错误。请检查并确保运行配方的 `runWith` 部分包含有效的用户或组。

RUN\$1CONFIG\$1NOT\$1VALID  
由于配方的 `run` 部分无效而无法运行组件时，可能会出现此错误。检查配方中的运行部分是否存在错误，然后重新尝试部署。

RUN\$1IO\$1ERROR  
若运行组件时发生 I/O 错误，则可能会出现此错误。检查组件错误日志，了解有关错误的详细信息。

RUN\$1TIMEOUT  
如果运行脚本未在配置的超时时间内完成，则可能会出现此错误。请延长配方 `run` 部分中指定的 `Timeout` 时间或修改运行脚本，使其在配置的超时时间内完成。

SHUTDOWN\$1ERROR  
若关闭组件脚本时发生错误，则可能会出现此错误。组件日志中报告了错误代码。检查关闭脚本是否存在错误，然后重新部署您的组件。

SHUTDOWN\$1TIMEOUT  
如果关闭脚本未在配置的超时时间内完成，则可能会出现此错误。请延长配方 `shutdown` 部分中指定的 `Timeout` 时间或修改运行脚本，使其在配置的超时时间内完成。