

终止支持通知：2026 年 10 月 7 日， Amazon 将停止对的支持。 Amazon IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 Amazon IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 Amazon IoT Greengrass Version 1](https://docs.amazonaws.cn/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 故障排除 Amazon IoT Greengrass
<a name="gg-troubleshooting"></a>

本节提供疑难解答信息和可能的解决方案，以帮助解决问题 Amazon IoT Greengrass。

<a name="gg-limits-genref"></a>有关 Amazon IoT Greengrass 配额（限制）的信息，请参阅中的 S [ervice Q](https://docs.amazonaws.cn/general/latest/gr/greengrass.html#limits_greengrass) uotas *Amazon Web Services 一般参考*。

## Amazon IoT Greengrass 核心问题
<a name="gg-troubleshooting-coreissues"></a>

如果 Amazon IoT Greengrass Core 软件无法启动，请尝试以下常规故障排除步骤：
+ 确保安装适合您的架构的二进制文件。有关更多信息，请参阅 [Amazon IoT Greengrass 核心软件](what-is-gg.md#gg-core-download-tab)。
+ 确保您的核心设备有可用的本地存储。有关更多信息，请参阅 [排查存储问题](#troubleshooting-storage)。
+ 检查 `runtime.log` 和 `crash.log` 是否有错误消息。有关更多信息，请参阅 [使用日志排查问题](#troubleshooting-logs)。

搜索以下症状和错误以查找有助于解决 Amazon IoT Greengrass 内核问题的信息。

**Topics**
+ [错误：配置文件缺少 CaPath、 CertPath 或 KeyPath。具有 [pid = <pid>] 的 Greengrass 守护程序进程终止。](#troubleshoot-config-file-version)
+ [错误：无法解析/<greengrass-root>/config/config.json。](#troubleshoot-config-file-invalid)
+ [错误：生成 TLS 配置时出错： ErrUnknownURIScheme](#troubleshooting-unknown-uri-scheme)
+ [错误：运行时未能启动：无法启动工作线程：容器测试超时。](#troubleshoot-post-start-health-check)
+ [错误：无法在本地 Cloudwatch PutLogEvents 上调用，logGroup: GreengrassSystem/connection /\_manager，错误 RequestError:: 发送请求失败原因是：Post http:<path>//cloudwatch/logs/: 拨打 tc <address>p：getsockopt：连接被拒绝，响应：{}。](#troubleshoot-cloudwatch-logs)
+ [<account-id><function-name><version><file-name>错误：无法创建服务器，原因是：无法加载组：chmod <greengrass-root>ggc/deployment///: aws: lambda::: function::: functi lambda/arn on::/: 没有这样的文件<region>或目录。](#troubleshoot-lambda-executable-handler)
+ [在您从不使用容器化的情况下运行更改为在 Greengrass 容器中运行后，C Amazon IoT Greengrass ore 软件不会启动。](#troubleshoot-no-container)
+ [错误：后台打印大小应至少为 262144 字节。](#troubleshoot-spool-size)
+ [错误：“[ERROR]-Cloud messaging error: Error occurred while trying to publish a message. {"errorString": "operation timed out"} ([ERROR]-云消息传递错误: 尝试发布消息时出错。{"errorString": "操作超时"})”](#troubleshoot-mqtt-operation-timed-out)
+ [<version>错误：container\_linux.go: 344：启动容器进程导致 “process\_linux.go: 424：容器初始化导致\\” rootfs\_linux.go: 64：将\\\\\\” /.sock\\\\\\” /packages/\\\\\\” /greengrass\_ipc.sock\\\\” /packages//\\\\\\” /greengrass\_ipc.sock\\\\” /packages/greengrass/ggc/\\\\\\” /greengras socket/greengrass\_ipc s\_ipc.sock\\\\” /p greengrass/ggc ackages/\\\\\\”/\\\\\\” 导致\\\\\\ “stat//.sock：权限被拒绝\\\\\\ “\\ “””。rootfs/merged greengrass/ggc socket/greengrass\_ipc](#troubleshoot-umask-permission)
+ [错误：Greengrass 守护程序在 PID 为 <process-id> 的情况下运行。某些系统组件无法启动。检查“runtime.log”中有无错误。](#troubleshoot-system-components)
+ [设备影子未与云同步。](#troubleshoot-shadow-sync)
+ [错误：无法接受 TCP 连接。接受 tcp [::]:8000: accept4：打开的文件太多。](#troubleshoot-file-descriptor-limit)
+ [错误：运行时执行错误：无法启动 lambda 容器。container\_linux.go:259: starting container process caused "process\_linux.go:345: container init caused \\"rootfs\_linux.go:50: preparing rootfs caused \\\\\\"permission denied\\\\\\"\\""。](#troubleshoot-execute-permissions)
+ [警告：[警告]-[5] GK Remote：检索公钥数据时出错 ErrPrincipalNotConfigured:: 未设置的 MqttCertificate 私钥。](#troubleshoot-mqttcertificate-warning)
+ [<region>错误：尝试使用角色 arn: aws: iam::: role/ 访问 s3 网址 https://-greengrassupdates.s3 时<account-id><role-name>权限被拒绝。 <region>.amazonaws。 com/core<distribution-version>/<architecture>/greengrass-core-.tar.gz。](#troubleshoot-ota-region-access)
+ [内 Amazon IoT Greengrass 核配置为使用[网络代理](gg-core.md#alpn-network-proxy)，您的 Lambda 函数无法建立传出连接。](#troubleshoot-lambda-proxy-network-connections)
+ [核心处于无限的连接-断开循环中。runtime.log 文件包含一系列连续的连接和断开条目。](#config-client-id)
+ [错误：无法启动 lambda 容器。container\_linux.go:259：启动容器进程导致出现 "process\_linux.go:345：容器初始化导致出现 \\"rootfs\_linux.go:62：正在将 \\\\\\"proc\\\\\\" 装载到 \\\\\\"](#troubleshoot-mount-proc-lambda-container)
+ [[ERROR] 运行时执行错误：无法启动 lambda 容器。{"errorString": "无法初始化容器装载：无法对叠加层上层目录中的 greengrass 根进行掩码处理：无法在目录 <ggc-path> 中创建掩码设备：文件已存在"}](#troubleshoot-usr-access-root)
+ [[ERROR]-部署失败。 {"deploymentId": "<deployment-id>", "errorString": "PID 为 <pid> 的容器测试进程失败: 容器进程状态: 出口状态 1"}](#troubleshoot-usr-access-root-canary)
+ [错误：[错误]-运行时执行错误：无法启动 lambda 容器。 <ggc-version><ggc-version><ggc-version>{“errorString”：“无法初始化容器挂载：无法为容器创建叠加层 fs：在//packages//上安装叠加层失败：无法使用 <ggc-version>args 挂载 source=\\” no\_source\\” dest=\\” greengrass/ggc /packages/rootfs/merged \\” fst <ggc-version>ype=\\ “overlay\\” flags=\\ “0\\” data=\\ “lowerdir=greengrass/ggc//packages/ /d rootfs/merged ns:/”，upperdir=/ /packages//，workdir greengrass/ggc =/ /packages//\\”：符号链接的层次太多了”} greengrass/ggc rootfs/upper greengrass/ggc rootfs/work](#troubleshoot-symbolic-links)
+ [错误：[DEBUG] – 未能获取路由。丢弃消息。](#troubleshoot-failed-to-get-routes)
+ [错误：[Errno 24] Too many open <lambda-function>,[Errno 24] Too many open files](#troubleshoot-too-many-open-files)
+ [错误：ds 服务器无法开始监听套接字：listen unix <ggc-path>ggc/socket//greengrass\_ipc.sock：bind：参数无效](#troubleshoot-install-path-too-long)
+ [[信息]（复印机）aws.greengrass。 StreamManager: stdout。由：com.fasterxml.jackson.databind 引起。 JsonMappingException: 即时超过最小或最大瞬间](#troubleshoot-stream-manager-instant-exceeds-maximun-minimum)
+ [GPG error: https://dnw9lb6lzp2d8.cloudfront.net stable InRelease: The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key](#troubleshoot-apt-repository-invalid-signature)

 

### 错误：配置文件缺少 CaPath、 CertPath 或 KeyPath。具有 [pid = <pid>] 的 Greengrass 守护程序进程终止。
<a name="troubleshoot-config-file-version"></a>

**解决方案：**当 C Amazon IoT Greengrass ore 软件无法启动`crash.log`时，您可能会看到此错误。如果您正在运行 v1.6 或更早版本，可能会发生此错误。请执行以下操作之一：
+ 升级至 v1.7 或更高版本。我们建议您始终运行最新版本的 Amazon IoT Greengrass Core 软件。有关下载信息，请参阅 [Amazon IoT Greengrass 核心软件](what-is-gg.md#gg-core-download-tab)。
+ 使用适用于您的 Amazon IoT Greengrass Core 软件版本的正确`config.json`格式。有关更多信息，请参阅 [Amazon IoT Greengrass 核心配置文件](gg-core.md#config-json)。
**注意**  
<a name="find-ggc-version-intro"></a>要查找 Amazon IoT Greengrass 核心设备上安装了哪个版本的 Core 软件，请在设备终端中运行以下命令。  

  ```
  cd /{{greengrass-root}}/ggc/core/
  sudo ./greengrassd --version
  ```

 

### 错误：无法解析/<greengrass-root>/config/config.json。
<a name="troubleshoot-config-file-invalid"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。确保 [Greengrass 配置文件](gg-core.md#config-json)使用了有效的 JSON 格式。

打开 `config.json`（位于 `/{{greengrass-root}}/config` 中），并验证 JSON 格式。例如，请确保逗号使用正确。

 

### 错误：生成 TLS 配置时出错： ErrUnknownURIScheme
<a name="troubleshooting-unknown-uri-scheme"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。确保 Greengrass 配置文件的 [crypto](gg-core.md#config-json-crypto) 部分中的属性是有效的。错误消息应提供更多信息。

打开 `config.json`（位于 `/{{greengrass-root}}/config` 中），并检查 `crypto` 部分。例如，证书和密钥路径必须使用正确的 URI 格式并指向正确的位置。

 

### 错误：运行时未能启动：无法启动工作线程：容器测试超时。
<a name="troubleshoot-post-start-health-check"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。在 [Greengrass 配置文件](gg-core.md#config-json)中设置 `postStartHealthCheckTimeout` 属性。此可选属性将配置 Greengrass 守护程序等待启动后运行状况检查完成的时间量（以毫秒为单位）。默认值为 30 秒（30000 毫秒）。

打开 `config.json`（位于 `/{{greengrass-root}}/config` 中）。在 `runtime` 对象中，添加 `postStartHealthCheckTimeout` 属性并将值设置为一个大于 30000 的数。在需要的位置添加逗号以创建有效的 JSON 文档。例如：

```
  ...
  "runtime" : {
    "cgroup" : {
      "useSystemd" : "yes"
    },
    "postStartHealthCheckTimeout" : 40000
  },
  ...
```

 

### 错误：无法在本地 Cloudwatch PutLogEvents 上调用，logGroup: GreengrassSystem/connection /\_manager，错误 RequestError:: 发送请求失败原因是：Post http:<path>//cloudwatch/logs/: 拨打 tc <address>p：getsockopt：连接被拒绝，响应：{}。
<a name="troubleshoot-cloudwatch-logs"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。如果您在 Raspberry Pi Amazon IoT Greengrass 上运行并且所需的内存设置尚未完成，则可能会发生这种情况。有关更多信息，请参阅[此步骤](setup-filter.rpi.md#stretch-step)。

 

### <account-id><function-name><version><file-name>错误：无法创建服务器，原因是：无法加载组：chmod <greengrass-root>ggc/deployment///: aws: lambda::: function::: functi lambda/arn on::/: 没有这样的文件<region>或目录。
<a name="troubleshoot-lambda-executable-handler"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。如果您将 [Lambda 可执行文件](lambda-functions.md#lambda-executables)部署到内核，请检查`group.json`文件中该函数的`Handler`属性（位于ggc/deployment//{{greengrass-root}}/group 中）。如果处理程序不是编译的可执行文件的确切名称，请将 `group.json` 文件内容替换为空 JSON 对象 (`{}`)，并运行以下命令以启动 Amazon IoT Greengrass：

```
cd /greengrass/ggc/core/
sudo ./greengrassd start
```

然后，使用 [Amazon Lambda API](https://docs.amazonaws.cn/cli/latest/reference/lambda/) 更新函数配置的 `handler` 参数，发布新的函数版本并更新别名。有关更多信息，请参阅 [Amazon Lambda 函数版本控制和别名](https://docs.amazonaws.cn/lambda/latest/dg/versioning-aliases.html)。

假设按别名将函数添加到 Greengrass 组（建议），您现在可以重新部署组。（否则，您必须在组定义和订阅中指向新的函数版本或别名，然后再部署组。）

 

### 在您从不使用容器化的情况下运行更改为在 Greengrass 容器中运行后，C Amazon IoT Greengrass ore 软件不会启动。
<a name="troubleshoot-no-container"></a>

**解决方案：**检查是否缺失任何容器依赖项。

 

### 错误：后台打印大小应至少为 262144 字节。
<a name="troubleshoot-spool-size"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。打开 `group.json` 文件（位于 `/{{greengrass-root}}/ggc/deployment/group` 中），将文件内容替换为空 JSON 对象 (`{}`)，然后运行以下命令以启动 Amazon IoT Greengrass：

```
cd /greengrass/ggc/core/
sudo ./greengrassd start
```

然后，遵循过程 [在本地存储中缓存消息](gg-core.md#configure-local-storage-cache) 中的步骤。对于 `GGCloudSpooler` 函数，请确保指定一个大于或等于 262144 的 `GG_CONFIG_MAX_SIZE_BYTES` 值。

 

### 错误：“[ERROR]-Cloud messaging error: Error occurred while trying to publish a message. {"errorString": "operation timed out"} ([ERROR]-云消息传递错误: 尝试发布消息时出错。{"errorString": "操作超时"})”
<a name="troubleshoot-mqtt-operation-timed-out"></a>

**解决方案：**当 Greengrass 核心无法向 Amazon IoT Core发送 MQTT 消息时，您可能会在 `GGCloudSpooler.log` 中看到此错误。如果核心环境存在有限的带宽和高延迟，则可能会发生此情况。[如果你运行的是 Amazon IoT Greengrass v1.10.2 或更高版本，请尝试增加 config.js `mqttOperationTimeout` on 文件中的值。](gg-core.md#config-json)如果此属性不存在，请将其添加到 `coreThing` 对象中。例如：

```
{
  "coreThing": {
    "mqttOperationTimeout": 10,
    "caPath": "root-ca.pem",
    "certPath": "{{hash}}.cert.pem",
    "keyPath": "{{hash}}.private.key",
    ...
  },
  ...
}
```

默认值为 `5`，最小值为 `5`。

 

### <version>错误：container\_linux.go: 344：启动容器进程导致 “process\_linux.go: 424：容器初始化导致\\” rootfs\_linux.go: 64：将\\\\\\” /.sock\\\\\\” /packages/\\\\\\” /greengrass\_ipc.sock\\\\” /packages//\\\\\\” /greengrass\_ipc.sock\\\\” /packages/greengrass/ggc/\\\\\\” /greengras socket/greengrass\_ipc s\_ipc.sock\\\\” /p greengrass/ggc ackages/\\\\\\”/\\\\\\” 导致\\\\\\ “stat//.sock：权限被拒绝\\\\\\ “\\ “””。rootfs/merged greengrass/ggc socket/greengrass\_ipc
<a name="troubleshoot-umask-permission"></a>

**解决方案：**当 C Amazon IoT Greengrass ore 软件无法启动`runtime.log`时，您可能会看到此错误。如果您的 `umask` 高于 `0022`，则会出现此情况。要解决此问题，您必须将 `umask` 设置为 `0022` 或更低。默认情况下，值 `0022` 向每个人授予对新文件的读取权限。

 

### 错误：Greengrass 守护程序在 PID 为 <process-id> 的情况下运行。某些系统组件无法启动。检查“runtime.log”中有无错误。
<a name="troubleshoot-system-components"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。检查 `runtime.log` 和 `crash.log` 中有无特定的错误信息。有关更多信息，请参阅 [使用日志排查问题](#troubleshooting-logs)。

 

### 设备影子未与云同步。
<a name="troubleshoot-shadow-sync"></a>

**解决方案：**确保该角色 Amazon IoT Greengrass 具有 [Greengrass](service-role.md) 服务角色的权限`iot:UpdateThingShadow`和`iot:GetThingShadow`操作。如果服务角色使用 `AWSGreengrassResourceAccessRolePolicy` 托管策略，则在默认情况下包含这些权限。

请参阅[影子同步超时问题排查](#troubleshooting-shadow-sync)。

 

### 错误：无法接受 TCP 连接。接受 tcp [::]:8000: accept4：打开的文件太多。
<a name="troubleshoot-file-descriptor-limit"></a>

**解决方案：** 您可能会在 `greengrassd` 脚本输出中看到此错误。如果 C Amazon IoT Greengrass ore 软件的文件描述符限制已达到阈值且必须增加，则可能会出现这种情况。

使用以下命令，然后重新启动 Amazon IoT Greengrass Core 软件。

```
ulimit -n 2048
```

**注意**  
在本示例中，该限制被调高到 2048。请选择符合您的使用案例的值。

 

### 错误：运行时执行错误：无法启动 lambda 容器。container\_linux.go:259: starting container process caused "process\_linux.go:345: container init caused \\"rootfs\_linux.go:50: preparing rootfs caused \\\\\\"permission denied\\\\\\"\\""。
<a name="troubleshoot-execute-permissions"></a>

**解决方案：**要么 Amazon IoT Greengrass 直接安装在根目录下，要么确保安装 Amazon IoT Greengrass 核心软件的目录及其父目录对所有人都有`execute`权限。

 

### 警告：[警告]-[5] GK Remote：检索公钥数据时出错 ErrPrincipalNotConfigured:: 未设置的 MqttCertificate 私钥。
<a name="troubleshoot-mqttcertificate-warning"></a>

**解决方案：** Amazon IoT Greengrass 使用通用处理程序来验证所有安全主体的属性。除非您为本地 MQTT 服务器指定了自定义私有密钥，否则将会在 `runtime.log` 中收到此警告。有关更多信息，请参阅 [Amazon IoT Greengrass 核心安全主体](gg-sec.md#gg-principals)。

 

### <region>错误：尝试使用角色 arn: aws: iam::: role/ 访问 s3 网址 https://-greengrassupdates.s3 时<account-id><role-name>权限被拒绝。 <region>.amazonaws。 com/core<distribution-version>/<architecture>/greengrass-core-.tar.gz。
<a name="troubleshoot-ota-region-access"></a>

**解决方案：**当无线 (OTA) 更新失败时，您可能会看到此错误。在签署人角色策略中，将目标 Amazon Web Services 区域 添加为 `Resource`。此签名者角色用于预签名 Amazon IoT Greengrass 软件更新的 S3 URL。有关更多信息，请参阅 [S3 URL 签署人角色](core-ota-update.md#s3-url-signer-role)。

 

### 内 Amazon IoT Greengrass 核配置为使用[网络代理](gg-core.md#alpn-network-proxy)，您的 Lambda 函数无法建立传出连接。
<a name="troubleshoot-lambda-proxy-network-connections"></a>

**解决方案：**根据您的运行时和 Lambda 函数用于创建连接的可执行文件，您也可能会收到连接超时错误。确保您的 Lambda 函数使用适当的代理配置通过网络代理进行连接。 Amazon IoT Greengrass 通过`http_proxy`、`https_proxy`和`no_proxy`环境变量将代理配置传递给用户定义的 Lambda 函数。可以按照以下 Python 代码段所示访问它们。

```
import os
print(os.environ['http_proxy'])
```

使用与环境中定义的变量相同的大小写，例如全部小写 `http_proxy` 或全部大写 `HTTP_PROXY`。对于这些变量，同时 Amazon IoT Greengrass 支持这两个变量。

**注意**  
用于建立连接的大多数公用库（例如 boto3 或 cURL 和 python `requests` 程序包）默认使用这些环境变量。

 

### 核心处于无限的连接-断开循环中。runtime.log 文件包含一系列连续的连接和断开条目。
<a name="config-client-id"></a>

**解决方案：**当另一个设备硬编码为使用核心事物名称作为与 Amazon IoT的 MQTT 连接的客户端 ID 时，可能会发生这种情况。同时连接相同， Amazon Web Services 区域 并且 Amazon Web Services 账户 必须使用唯一的客户端 ID。默认情况下，核心使用核心事物名称作为这些连接的客户端 ID。

为解决此问题，您可以更改另一个设备用于连接的客户端 ID（推荐），或覆盖核心的默认值。

**覆盖核心设备的默认客户端 ID**

1. 运行以下命令以停止 Greengrass 进程守护程序：

   ```
   cd /{{greengrass-root}}/ggc/core/
   sudo ./greengrassd stop
   ```

1. 打开 `{{greengrass-root}}/config/config.json` 以作为 su 用户进行编辑。

1. 在 `coreThing` 对象中，添加 `coreClientId` 属性，并将值设置为您的自定义客户端 ID。值的长度必须介于 1 到 128 个字符之间。它对于 Amazon Web Services 账户的当前 Amazon Web Services 区域 必须是唯一的。

   ```
   "coreClientId": "MyCustomClientId"
   ```

1. 启动进程守护程序。

   ```
   cd /{{greengrass-root}}/ggc/core/
   sudo ./greengrassd start
   ```

 

### 错误：无法启动 lambda 容器。container\_linux.go:259：启动容器进程导致出现 "process\_linux.go:345：容器初始化导致出现 \\"rootfs\_linux.go:62：正在将 \\\\\\"proc\\\\\\" 装载到 \\\\\\"
<a name="troubleshoot-mount-proc-lambda-container"></a>

**解决方案：**在某些平台上，`runtime.log`当 Amazon IoT Greengrass 尝试挂载`/proc`文件系统以创建 Lambda 容器时，您可能会看到此错误。或者，您可能会看到类似的错误，例如 `operation not permitted` 或 `EPERM`。即使通过了由依赖关系检查器脚本在平台上运行的测试，仍可能出现这些错误。

请尝试下列可能的解决方案之一：
+ 在 Linux 内核中启用 `CONFIG_DEVPTS_MULTIPLE_INSTANCES` 选项。
+ 仅在主机上将 `/proc` 装载选项设置为 `rw,relatim`。
+ 将 Linux 内核升级到 4.9 或更高版本。

**注意**  
此问题与装载 `/proc` 供本地资源访问无关。

 

### [ERROR] 运行时执行错误：无法启动 lambda 容器。{"errorString": "无法初始化容器装载：无法对叠加层上层目录中的 greengrass 根进行掩码处理：无法在目录 <ggc-path> 中创建掩码设备：文件已存在"}
<a name="troubleshoot-usr-access-root"></a>

**解决方案：**在部署失败时，您可能会在 runtime.log 中看到此错误。如果 Amazon IoT Greengrass 组中的 Lambda 函数无法访问核心文件系统中的`/usr`目录，则会发生此错误。

要解决此问题，请将本地卷资源添加到组，然后部署该组。该资源必须：
+ 指定 `/usr` 作为 **Source path (源路径)** 和 **Destination path (目标路径)**。
+ 自动添加拥有资源的 Linux 组的操作系统组权限。
+ 与 Lambda 函数关联并允许只读访问。

 

### [ERROR]-部署失败。 {"deploymentId": "<deployment-id>", "errorString": "PID 为 <pid> 的容器测试进程失败: 容器进程状态: 出口状态 1"}
<a name="troubleshoot-usr-access-root-canary"></a>

**解决方案：**在部署失败时，您可能会在 runtime.log 中看到此错误。如果 Amazon IoT Greengrass 组中的 Lambda 函数无法访问核心文件系统中的`/usr`目录，则会发生此错误。

可以通过检查 `GGCanary.log` 是否存在其他错误来确认情况确实如此。如果 Lambda 函数无法访问 `/usr` 目录，则 `GGCanary.log` 将包含以下错误：

```
[ERROR]-standard_init_linux.go:207: exec user process caused "no such file or directory"
```

要解决此问题，请将本地卷资源添加到组，然后部署该组。该资源必须：
+ 指定 `/usr` 作为 **Source path (源路径)** 和 **Destination path (目标路径)**。
+ 自动添加拥有资源的 Linux 组的操作系统组权限。
+ 与 Lambda 函数关联并允许只读访问。

 

### 错误：[错误]-运行时执行错误：无法启动 lambda 容器。 <ggc-version><ggc-version><ggc-version>{“errorString”：“无法初始化容器挂载：无法为容器创建叠加层 fs：在//packages//上安装叠加层失败：无法使用 <ggc-version>args 挂载 source=\\” no\_source\\” dest=\\” greengrass/ggc /packages/rootfs/merged \\” fst <ggc-version>ype=\\ “overlay\\” flags=\\ “0\\” data=\\ “lowerdir=greengrass/ggc//packages/ /d rootfs/merged ns:/”，upperdir=/ /packages//，workdir greengrass/ggc =/ /packages//\\”：符号链接的层次太多了”} greengrass/ggc rootfs/upper greengrass/ggc rootfs/work
<a name="troubleshoot-symbolic-links"></a>

**解决方案：**当 C Amazon IoT Greengrass ore 软件无法启动时，您可能会在`runtime.log`文件中看到此错误。此问题在 Debian 操作系统中可能更常见。

要解决此问题，请执行以下操作：

1. 将 Amazon IoT Greengrass 核心软件升级到 v1.9.3 或更高版本。这应该可以自动解决此问题。

1. 如果在升级 C Amazon IoT Greengrass ore 软件后仍然出现此错误，请在 [config.json](gg-core.md#config-json) 文件`true`中将该`system.useOverlayWithTmpfs`属性设置为。  
**Example 示例**  

   ```
   {
     "system": {
       "useOverlayWithTmpfs": true
     },
     "coreThing": {
       "caPath": "root-ca.pem",
       "certPath": "cloud.pem.crt",
       "keyPath": "cloud.pem.key",
       ...
     },
     ...
   }
   ```

**注意**  
错误消息中显示了您的 C Amazon IoT Greengrass ore 软件版本。要查找 Linux 的内核版本，请运行 `uname -r`。

 

### 错误：[DEBUG] – 未能获取路由。丢弃消息。
<a name="troubleshoot-failed-to-get-routes"></a>

**解决方案：**检查您的组中的订阅并确保订阅列出在 `[DEBUG]` 消息中。

 

### 错误：[Errno 24] Too many open <lambda-function>,[Errno 24] Too many open files
<a name="troubleshoot-too-many-open-files"></a>

**解决方案：**如果函数在函数处理程序中实例化 `StreamManagerClient`，您可能会在 Lambda 函数日志文件中看到此错误。我们建议您在处理程序之外创建客户端。有关更多信息，请参阅 [StreamManagerClient 用于处理直播](work-with-streams.md)。

 

### 错误：ds 服务器无法开始监听套接字：listen unix <ggc-path>ggc/socket//greengrass\_ipc.sock：bind：参数无效
<a name="troubleshoot-install-path-too-long"></a>

**解决方案：**当 Amazon IoT Greengrass 核心软件无法启动时，您可能会看到此错误。当将 Amazon IoT Greengrass Core 软件安装到文件路径较长的文件夹中时，就会发生此错误。如果您不使用写入目录，则将 Amazon IoT Greengrass Core 软件重新安装到文件路径少于 79 字节的文件夹；如果使用[写入目录](gg-core.md#write-directory)，则将 Core 软件重新安装到文件路径小于 83 字节的文件夹。

### [信息]（复印机）aws.greengrass。 StreamManager: stdout。由：com.fasterxml.jackson.databind 引起。 JsonMappingException: 即时超过最小或最大瞬间
<a name="troubleshoot-stream-manager-instant-exceeds-maximun-minimum"></a>

将 Amazon IoT Greengrass 核心软件升级到 v1.11.3 时，如果流管理器无法启动，则可能会在流管理器日志中看到以下错误。

```
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}
```

如果您使用的 Amazon IoT Greengrass 核心软件版本早于 v1.11.3，并且想要升级到更高版本，请使用 OTA 更新升级到 v1.11.4。

### GPG error: https://dnw9lb6lzp2d8.cloudfront.net stable InRelease: The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key
<a name="troubleshoot-apt-repository-invalid-signature"></a>

当你`apt update`在[安装了 APT 存储库中的 Amazon IoT Greengrass 核心软件的](install-ggc.md#ggc-package-manager)设备上运行时，你可能会看到以下错误。

```
Err:4 https://dnw9lb6lzp2d8.cloudfront.net stable InRelease
  The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key
Reading package lists... Done                             
W: GPG error: https://dnw9lb6lzp2d8.cloudfront.net stable InRelease: The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key
```

之所以出现此错误，是因为 Amazon IoT Greengrass 不再提供从 APT 存储库安装或更新 Amazon IoT Greengrass 核心软件的选项。要成功运行`apt update`，请从设备的来源列表中移除 Amazon IoT Greengrass 存储库。

```
sudo rm /etc/apt/sources.list.d/greengrass.list 
sudo apt update
```

## 部署问题
<a name="gg-troubleshooting-deploymentissues"></a>

使用以下信息可帮助您排查部署问题。

**Topics**
+ [您当前的部署不起作用，并且您希望恢复到以前有效的部署。](#troubleshoot-revert-deployment)
+ [您在日志中看到有关部署的“403 禁止访问”错误。](#troubleshoot-forbidden-deployment)
+ [首次运行 create-deployment 命令时会发生 ConcurrentDeployment 错误。](#troubleshoot-concurrent-deployment)
+ [错误：未授权 Greengrass 担任与该账户相关的服务角色，或错误：失败：TES 服务角色未与此账户关联。](#troubleshoot-assume-service-role)
+ [错误：无法在部署中执行下载步骤。下载时出现错误：下载组定义文件时出错：... x509: certificate has expired or is not yet valid](#troubleshoot-x509-certificate-expired)
+ [部署未完成。](#troubleshoot-stuck-deployment)
+ [错误：找不到 java 或 java8 可执行文件，或者出现错误：<deployment-id> NewDeployment 为组部署类型<group-id>失败错误：worker 无法<worker-id>初始化原因安装的 Java 版本必须大于或等于 8](#java-8-runtime-requirement)
+ [部署未完成，并且 runtime.log 包含多个“等待 1 秒钟让容器停止”条目。](#troubleshoot-wait-container-stop)
+ [部署未完成，`runtime.log` 中包含“[ERROR]-Greengrass deployment error: failed to report deployment status back to cloud {"deploymentId": "<deployment-id>", "errorString": "Failed to initiate PUT, endpoint: https://<deployment-status>, error: Put https://<deployment-status>: proxyconnect tcp: x509: certificate signed by unknown authority"}”](#troubleshoot-failed-to-report-deployment-status)
+ [<path>错误：<deployment-id> NewDeployment 为组部署类型<group-id>失败错误：处理时出错。组配置无效：112 或 [119 0] 对文件没有 rw 权限：。](#troubleshoot-access-permissions-deployment)
+ [错误：<list-of-function-arns> 配置为以根用户身份运行，但 Greengrass 未配置为通过根用户权限运行 Lambda 函数。](#troubleshoot-root-permissions-lambda)
+ [错误：<deployment-id>组类型 NewDeployment 部署<group-id>失败错误：Greengrass 部署错误：无法在部署中执行下载步骤。处理时出错：无法加载下载的组文件：无法根据用户名找到 UID，用户名：ggc\_user：用户：未知用户 ggc\_user：未知用户 ggc\_user。](#troubleshoot-could-not-find-uid)
+ [错误：[ERROR]-runtime execution error: unable to start lambda container. {"errorString": "failed to initialize container mounts: failed to mask greengrass root in overlay upper dir: failed to create mask device at directory <ggc-path>: file exists"} ([ERROR] 运行时执行错误：无法启动 lambda 容器。{"errorString": "无法初始化容器装载：无法对叠加层上层目录中的 greengrass 根进行掩码处理：无法在目录 <ggc-path> 中创建掩码设备：文件已存在"})](#troubleshoot-failed-to-initialize-container-mounts)
+ [错误：<deployment-id> NewDeployment 为组部署类型失败<group-id>错误：进程启动失败：container\_linux.go: 259：启动容器进程导致 “process\_linux.go: 250：为初始化运行 exec setns 进程导致\\” 等待：没有子进程\\ “”。](#troubleshoot-wait-child-processes)
+ [错误: [WARN]-MQTT[client] dial tcp: lookup <host-prefix>-ats.iot.<region>.amazonaws.com: 没有此类主机 ... [错误]-Greengrass 部署错误：无法将部署状态报告回云端... net/http: 等待连接时请求已取消（等待标头时Client.Timeout 已超出请求范围）](#troubleshoot-dnssec-validation-failed)

 

### 您当前的部署不起作用，并且您希望恢复到以前有效的部署。
<a name="troubleshoot-revert-deployment"></a>

**解决方案：**使用 Amazon IoT 控制台或 Amazon IoT Greengrass API 重新部署先前有效的部署。这会将相应的组版本部署到您的核心设备。

**重新部署一个部署（控制台）**

1. 在组配置页面上，选择 **部署**选项卡。该页面显示组的部署历史记录，包括日期和时间、组版本以及每次部署尝试的状态。

1. 查找包含您要重新部署的部署的行。选择要重新部署的部署，然后选择**重新部署**。  
![显示部署 Re-Deploy 操作的部署页面。](http://docs.amazonaws.cn/greengrass/v1/developerguide/images/console-group-redeployment.png)

**重新部署一个部署 (CLI)**

1. 用于查找[ListDeployments](https://docs.amazonaws.cn/greengrass/v1/apireference/listdeployments-get.html)要重新部署的部署的 ID。例如：

   ```
   aws greengrass list-deployments --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7
   ```

   该命令将返回组的部署列表。

   ```
   {
       "Deployments": [
           {
               "DeploymentId": "8d179428-f617-4a77-8a0c-3d61fb8446a6",
               "DeploymentType": "NewDeployment",
               "GroupArn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/8dd1d899-4ac9-4f5d-afe4-22de086efc62",
               "CreatedAt": "2019-07-01T20:56:49.641Z"
           },
           {
               "DeploymentId": "f8e4c455-8ac4-453a-8252-512dc3e9c596",
               "DeploymentType": "NewDeployment",
               "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/4ad66e5d-3808-446b-940a-b1a788898382",
               "CreatedAt": "2019-07-01T20:41:47.048Z"
           },
           {
               "DeploymentId": "e4aca044-bbd8-41b4-b697-930ca7c40f3e",
               "DeploymentType": "NewDeployment",
               "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/1f3870b6-850e-4c97-8018-c872e17b235b",
               "CreatedAt": "2019-06-18T15:16:02.965Z"
           }
       ]
   }
   ```
**注意**  
这些 Amazon CLI 命令使用组和部署 ID 的示例值。当您运行这些命令时，确保替换示例值。

1. 用于[CreateDeployment](https://docs.amazonaws.cn/greengrass/v1/apireference/createdeployment-post.html)重新部署目标部署。将部署类型设置为 `Redeployment`。例如：

   ```
   aws greengrass create-deployment --deployment-type Redeployment \ 
     --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7 \
     --deployment-id f8e4c455-8ac4-453a-8252-512dc3e9c596
   ```

   该命令会返回新部署的 ARN 和 ID。

   ```
   {
       "DeploymentId": "f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2",
       "DeploymentArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/deployments/f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2"
   }
   ```

1. [GetDeploymentStatus](https://docs.amazonaws.cn/greengrass/v1/apireference/getdeploymentstatus-get.html)用于获取部署状态。

 

### 您在日志中看到有关部署的“403 禁止访问”错误。
<a name="troubleshoot-forbidden-deployment"></a>

**解决方案：**确保云中 Amazon IoT Greengrass 核心的策略包含`"greengrass:*"`为允许的操作。

 

### 首次运行 create-deployment 命令时会发生 ConcurrentDeployment 错误。
<a name="troubleshoot-concurrent-deployment"></a>

**解决方案：**可能正在进行部署。您可以运行 [get-deployment-status](https://docs.amazonaws.cn/greengrass/v1/apireference/getdeploymentstatus-get.html) 以查看是否已创建部署。如果没有，请再次尝试创建部署。

 

### 错误：未授权 Greengrass 担任与该账户相关的服务角色，或错误：失败：TES 服务角色未与此账户关联。
<a name="troubleshoot-assume-service-role"></a>

**解决方案：**当部署失败时，您可能会看到此错误。检查 Greengrass 服务角色是否与您在当前 Amazon Web Services 区域中的 Amazon Web Services 账户 相关联。有关更多信息，请参阅 [管理 Greengrass 服务角色 (CLI)](service-role.md#manage-service-role-cli)或 [管理 Greengrass 服务角色（控制台）](service-role.md#manage-service-role-console)。

 

### 错误：无法在部署中执行下载步骤。下载时出现错误：下载组定义文件时出错：... x509: certificate has expired or is not yet valid
<a name="troubleshoot-x509-certificate-expired"></a>

**解决方案：**在部署失败时，您可能会在 `runtime.log` 中看到此错误。如果您收到包含 `x509: certificate has expired or is not yet valid` 消息的 `Deployment failed` 错误，请检查设备时钟。TLS 和 X.509 证书为构建 IoT 系统提供了安全的基础，但它们需要服务器和客户端的准确时间。物联网设备在尝试连接 Amazon IoT Greengrass 或使用服务器证书的其他 TLS 服务之前，应有正确的时间（15 分钟内）。有关更多信息，请参阅* Amazon 官方博客上的使用设备时间在物联网上*[验证 Amazon IoT 服务器证书](https://www.amazonaws.cn/blogs/iot/using-device-time-to-validate-aws-iot-server-certificates/)。

 

### 部署未完成。
<a name="troubleshoot-stuck-deployment"></a>

**解决方案：**执行以下操作：
+ 确保 Amazon IoT Greengrass 守护程序正在您的核心设备上运行。在您的核心设备终端中运行以下命令来检查进程守护程序是否正在运行并启动它（如果需要）。

  1. 要检查进程守护程序是否正在运行，请执行以下操作：

     ```
     ps aux | grep -E 'greengrass.*daemon'
     ```

     如果输出包含 `root` 的 `/greengrass/ggc/packages/1.11.6/bin/daemon` 条目，则表示进程守护程序正在运行。

     路径中的版本取决于 Amazon IoT Greengrass 核心设备上安装的 Core 软件版本。

  1. 启动进程守护程序：

     ```
     cd /greengrass/ggc/core/
     sudo ./greengrassd start
     ```
+ 确保已连接核心设备并正确配置核心连接终端节点。

 

### 错误：找不到 java 或 java8 可执行文件，或者出现错误：<deployment-id> NewDeployment 为组部署类型<group-id>失败错误：worker 无法<worker-id>初始化原因安装的 Java 版本必须大于或等于 8
<a name="java-8-runtime-requirement"></a>

**解决方案：**如果为 Amazon IoT Greengrass 核心启用流管理器，必须在核心设备上安装 Java 8 运行时，然后再部署组。有关更多信息，请参阅流管理器的[要求](stream-manager.md#stream-manager-requirements)。使用 Amazon IoT 控制台上的**默认组创建**工作流来创建组时，默认情况下会启用流管理器。

或者，禁用流管理器，然后部署该组。有关更多信息，请参阅 [配置流管理器设置（控制台）](configure-stream-manager.md#configure-stream-manager-console)。

 

### 部署未完成，并且 runtime.log 包含多个“等待 1 秒钟让容器停止”条目。
<a name="troubleshoot-wait-container-stop"></a>

**解决方案：**在核心设备终端中运行以下命令以重新启动 Amazon IoT Greengrass 守护程序。

```
cd /greengrass/ggc/core/
sudo ./greengrassd stop
sudo ./greengrassd start
```

 

### 部署未完成，`runtime.log` 中包含“[ERROR]-Greengrass deployment error: failed to report deployment status back to cloud {"deploymentId": "<deployment-id>", "errorString": "Failed to initiate PUT, endpoint: https://<deployment-status>, error: Put https://<deployment-status>: proxyconnect tcp: x509: certificate signed by unknown authority"}”
<a name="troubleshoot-failed-to-report-deployment-status"></a>

**解决方案：**当 Greengrass 核心被配置为使用 HTTPS 代理连接且代理服务器证书链在系统上不受信任时，您可能会在 `runtime.log` 中看到此错误。若要尝试解决此问题，请将该证书链添加到根 CA 证书中。Greengrass 核心会将此文件中的证书添加到在与 Amazon IoT Greengrass建立 HTTPS 和 MQTT 连接时用于进行 TLS 身份验证的证书池。

以下示例显示了添加到根 CA 证书文件中的代理服务器 CA 证书：

```
# My proxy CA
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK
\nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww
... {{content of proxy CA certificate}} ...
+vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui
GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216
gJMIADggEPADf2/m45hzEXAMPLE=
-----END CERTIFICATE-----

# Amazon Root CA 1
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg
ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW
... {{content of root CA certificate}} ...
o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa
5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy
rqXRfKoQnoZsG4q5WTP46EXAMPLE
-----END CERTIFICATE-----
```

默认情况下，根 CA 证书文件位于 `/{{greengrass-root}}/certs/root.ca.pem` 中。要查找核心设备上的位置，请在 [config.json](gg-core.md#config-json) 中查看 `crypto.caPath` 属性。

**注意**  
{{greengrass-root}}表示 C Amazon IoT Greengrass ore 软件在您的设备上的安装路径。通常，这是 `/greengrass` 目录。

 

### <path>错误：<deployment-id> NewDeployment 为组部署类型<group-id>失败错误：处理时出错。组配置无效：112 或 [119 0] 对文件没有 rw 权限：。
<a name="troubleshoot-access-permissions-deployment"></a>

**解决方案：**确保目录的所有者组对该{{<path>}}目录具有读写权限。

 

### 错误：<list-of-function-arns> 配置为以根用户身份运行，但 Greengrass 未配置为通过根用户权限运行 Lambda 函数。
<a name="troubleshoot-root-permissions-lambda"></a>

**解决方案：**在部署失败时，您可能会在 `runtime.log` 中看到此错误。确保您已配置为 Amazon IoT Greengrass 允许 Lambda 函数以根权限运行。要么将 `allowFunctionsToRunAsRoot` in 的值更改为`greengrass_root/config/config.json`，要`yes`么将 Lambda 函数更改为其他函数。 user/group有关更多信息，请参阅 [以根用户身份运行 Lambda 函数](lambda-group-config.md#lambda-running-as-root)。

 

### 错误：<deployment-id>组类型 NewDeployment 部署<group-id>失败错误：Greengrass 部署错误：无法在部署中执行下载步骤。处理时出错：无法加载下载的组文件：无法根据用户名找到 UID，用户名：ggc\_user：用户：未知用户 ggc\_user：未知用户 ggc\_user。
<a name="troubleshoot-could-not-find-uid"></a>

**解决方案：**如果 Amazon IoT Greengrass 群组的[默认访问身份](lambda-group-config.md#lambda-access-identity-groupsettings)使用标准系统帐户，则该`ggc_user`用户和`ggc_group`群组必须出现在设备上。有关介绍如何添加用户和组的说明，请参阅此[步骤](setup-filter.rpi.md#add-ggc-user-ggc-group)。请务必完全按所述的方式输入名称。

 

### 错误：[ERROR]-runtime execution error: unable to start lambda container. {"errorString": "failed to initialize container mounts: failed to mask greengrass root in overlay upper dir: failed to create mask device at directory <ggc-path>: file exists"} ([ERROR] 运行时执行错误：无法启动 lambda 容器。{"errorString": "无法初始化容器装载：无法对叠加层上层目录中的 greengrass 根进行掩码处理：无法在目录 <ggc-path> 中创建掩码设备：文件已存在"})
<a name="troubleshoot-failed-to-initialize-container-mounts"></a>

**解决方案：**在部署失败时，您可能会在 `runtime.log` 中看到此错误。如果 Greengrass 组中的 Lambda 函数无法访问核心文件系统中的 `/usr` 目录，则会出现此错误。要解决此问题，请将[本地卷资源](access-local-resources.md)添加到组，然后部署该组。资源必须：
+ 指定 `/usr` 作为 **Source path (源路径)** 和 **Destination path (目标路径)**。
+ 自动添加拥有资源的 Linux 组的操作系统组权限。
+ 与 Lambda 函数关联并允许只读访问。

 

### 错误：<deployment-id> NewDeployment 为组部署类型失败<group-id>错误：进程启动失败：container\_linux.go: 259：启动容器进程导致 “process\_linux.go: 250：为初始化运行 exec setns 进程导致\\” 等待：没有子进程\\ “”。
<a name="troubleshoot-wait-child-processes"></a>

**解决方案：**当部署失败时，您可能会看到此错误。重试部署。

 

### 错误: [WARN]-MQTT[client] dial tcp: lookup <host-prefix>-ats.iot.<region>.amazonaws.com: 没有此类主机 ... [错误]-Greengrass 部署错误：无法将部署状态报告回云端... net/http: 等待连接时请求已取消（等待标头时Client.Timeout 已超出请求范围）
<a name="troubleshoot-dnssec-validation-failed"></a>

**解决方案：**如果您使用 `systemd-resolved`（默认情况下会启用 `DNSSEC` 设置），则可能会看到此错误。因此，无法识别许多公共域。尝试访问 Amazon IoT Greengrass 终端节点时无法找到主机，因此您的部署仍处于`In Progress`状态。

您可以使用以下命令和输出以测试此问题。将终端节点中的{{region}}占位符替换为。 Amazon Web Services 区域

```
$ ping greengrass-ats.iot.{{region}}.amazonaws.com
ping: greengrass-ats.iot.{{region}}.amazonaws.com: Name or service not known
```

```
$ systemd-resolve greengrass-ats.iot.{{region}}.amazonaws.com
greengrass-ats.iot.{{region}}.amazonaws.com: resolve call failed: DNSSEC validation failed: failed-auxiliary
```

一个可能的解决方案是禁用 `DNSSEC`。当 `DNSSEC` 为 `false` 时，DNS 查找未经过 `DNSSEC` 验证。有关更多信息，请参阅 `systemd` 的[已知问题](https://github.com/systemd/systemd/issues/9867)。

1. 将 `DNSSEC=false` 添加到 `/etc/systemd/resolved.conf`。

1. 重新启动 `systemd-resolved`。

有关 `resolved.conf` 和 `DNSSEC` 的信息，请在终端中运行 `man resolved.conf`。

 

## 有关创建组和创建函数的问题
<a name="gg-troubleshooting-groupcreateissues"></a>

使用以下信息来帮助解决创建 Amazon IoT Greengrass 群组或 Greengrass Lambda 函数时遇到的问题。

**Topics**
+ [错误：您为该组设置IsolationMode的 “” 配置无效。](#troubleshoot-invalid-isolation-mode-group)
+ [错误：你对带有 arn 的函数IsolationMode的 “” 配置<function-arn>无效。](#troubleshoot-isolation-mode-lambda)
+ [错误：<function-arn>不允许在 IsolationMode = NoContainer 中 MemorySize 配置带有 arn 的函数。](#troubleshoot-lambda-memorysize-not-supported)
+ [错误：<function-arn>不允许在 = 中访问带有 arn 的函数的 Sysfs 配置。 IsolationMode NoContainer](#troubleshoot-sysfs-access-not-supported)
+ [错误：<function-arn>需要在 IsolationMode = GreengrassContainer 中 MemorySize 配置带有 arn 的函数。](#troubleshoot-lambda-memorysize-required)
+ [错误：函数<function-arn>指<resource-type>的是 IsolationMode = 中不允许使用的类型的资源NoContainer。](#troubleshoot-resource-access-not-supported)
+ [错误：不允许使用具有 arn <function-arn> 的函数的 Execution 配置。](#troubleshoot-execution-parameters-not-supported)

 

### 错误：您为该组设置IsolationMode的 “” 配置无效。
<a name="troubleshoot-invalid-isolation-mode-group"></a>

**解决方案：**当 `function-definition-version` 的 `DefaultConfig` 中的 `IsolationMode` 值不受支持时，会出现此错误。支持的值为 `GreengrassContainer` 和 `NoContainer`。

 

### 错误：你对带有 arn 的函数IsolationMode的 “” 配置<function-arn>无效。
<a name="troubleshoot-isolation-mode-lambda"></a>

**解决方案：**当 `function-definition-version` 的 <function-arn> 中的 `IsolationMode` 值不受支持时，会出现此错误。支持的值为 `GreengrassContainer` 和 `NoContainer`。

 

### 错误：<function-arn>不允许在 IsolationMode = NoContainer 中 MemorySize 配置带有 arn 的函数。
<a name="troubleshoot-lambda-memorysize-not-supported"></a>

**解决方案：**如果您指定一个 `MemorySize` 值并选择在不使用容器化的情况下运行，就会发生此错误。在没有容器化的情况下运行的 Lambda 函数不能有内存限制。您可以删除限制，也可以更改 Lambda 函数以使其在 Amazon IoT Greengrass 容器中运行。

 

### 错误：<function-arn>不允许在 = 中访问带有 arn 的函数的 Sysfs 配置。 IsolationMode NoContainer
<a name="troubleshoot-sysfs-access-not-supported"></a>

**解决方案：**如果您为 `AccessSysfs` 指定 `true` 并选择在不使用容器化的情况下运行，就会发生此错误。在没有容器化的情况下运行的 Lambda 函数必须更新其代码才能直接访问文件系统，并且不能使用 `AccessSysfs`。您可以将 for 的值指定为，`AccessSysfs`也可以将 Lambda 函数更改`false`为在容器 Amazon IoT Greengrass 中运行。

 

### 错误：<function-arn>需要在 IsolationMode = GreengrassContainer 中 MemorySize 配置带有 arn 的函数。
<a name="troubleshoot-lambda-memorysize-required"></a>

**解决方案：**之所以出现此错误，是因为您没有为在容器中运行的 Lambda 函数指定`MemorySize`限制。 Amazon IoT Greengrass 指定 `MemorySize` 值可解决该错误。

 

### 错误：函数<function-arn>指<resource-type>的是 IsolationMode = 中不允许使用的类型的资源NoContainer。
<a name="troubleshoot-resource-access-not-supported"></a>

**解决方案：**当您在不进行容器化的情况下运行 Lambda 函数时，您不能访问 `Local.Device`、`Local.Volume`、`ML_Model.SageMaker.Job`、`ML_Model.S3_Object` 或 `S3_Object.Generic_Archive` 资源类型。如果您需要这些资源类型，则必须在 Amazon IoT Greengrass 容器中运行。您也可以更改 Lambda 函数中的代码，从而在不进行容器化的情况下直接访问本地设备。

 

### 错误：不允许使用具有 arn <function-arn> 的函数的 Execution 配置。
<a name="troubleshoot-execution-parameters-not-supported"></a>

**解决方案：**当您创建一个具有 `GGIPDetector` 或 `GGCloudSpooler` 的系统 Lambda 函数并且您指定了 `IsolationMode` 或 `RunAs` 配置时，会出现此错误。您必须省略该系统 Lambda 函数的 `Execution` 参数。

 

## 发现问题
<a name="gg-troubleshooting-discovery-issues"></a>

使用以下信息来帮助排除 Amazon IoT Greengrass Discovery 服务的问题。

**Topics**
+ [错误：Device is a member of too many groups, devices may not be in more than 10 groups](#troubleshoot-device-in-too-many-groups)

 

### 错误：Device is a member of too many groups, devices may not be in more than 10 groups
<a name="troubleshoot-device-in-too-many-groups"></a>

**解决方案：** 这是一个已知的限制。一个[客户端设备](what-is-gg.md#greengrass-devices)最多可以是 10 个组的成员。

 

## 机器学习资源问题
<a name="ml-resources-troubleshooting"></a>

使用以下信息帮助解决机器学习资源的问题。

**Topics**
+ [InvalidMLModelOwner - GroupOwnerSetting 在 ML 模型资源中提供，但不 GroupPermission 存在 GroupOwner 或不存在](#nocontainer-lambda-invalid-ml-model-owner)
+ [NoContainer 在附加 Machine Learning 资源时，函数无法配置权限。 <function-arn>指的是资源<resource-id>访问策略中具有 < ro/rw > 权限的机器学习资源。](#nocontainer-lambda-invalid-resource-access-policy)
+ [函数<function-arn>指的是 Machine <resource-id>Learning 资源，但两者都缺少权限 ResourceAccessPolicy 和资源 OwnerSetting。](#nocontainer-lambda-missing-access-permission)
+ [函数<function-arn>指的是具有<resource-id>\\ “rw\\” 权限的 Machine Learning 资源，而资源所有者设置 GroupPermission 仅允许\\ “ro\\”。](#container-lambda-invalid-rw-permissions)
+ [NoContainer 函数<function-arn>是指嵌套目标路径的资源。](#nocontainer-lambda-nested-destination-path)
+ [Lambda <function-arn> 通过共享同一组所有者 ID 获得对资源 <resource-id> 的访问权限](#lambda-runas-and-resource-owner)

 

### InvalidMLModelOwner - GroupOwnerSetting 在 ML 模型资源中提供，但不 GroupPermission 存在 GroupOwner 或不存在
<a name="nocontainer-lambda-invalid-ml-model-owner"></a>

**解决方案：**如果机器学习资源包含[ResourceDownloadOwnerSetting](https://docs.amazonaws.cn/greengrass/v1/apireference/definitions-resourcedownloadownersetting.html)对象，但未定义必需的`GroupOwner`或`GroupPermission`属性，则会收到此错误。要解决此问题，请定义缺失的属性。

 

### NoContainer 在附加 Machine Learning 资源时，函数无法配置权限。 <function-arn>指的是资源<resource-id>访问策略中具有 < ro/rw > 权限的机器学习资源。
<a name="nocontainer-lambda-invalid-resource-access-policy"></a>

**解决方案：**如果非容器化 Lambda 函数指定了机器学习资源的函数级权限，则会收到此错误。 Non-containerized 函数必须继承机器学习资源上定义的资源所有者权限的权限。要解决此问题，请选择[继承资源所有者权限](access-ml-resources.md#non-container-config-console)（控制台）或[从 Lambda 函数的资源访问策略 (API) 中删除权限](access-ml-resources.md#non-container-config-api)。

 

### 函数<function-arn>指的是 Machine <resource-id>Learning 资源，但两者都缺少权限 ResourceAccessPolicy 和资源 OwnerSetting。
<a name="nocontainer-lambda-missing-access-permission"></a>

**解决方案：**如果未为附加的 Lambda 函数或资源配置对机器学习资源的权限，则会收到此错误。要解决此问题，请在 Lambda 函数的[ResourceAccessPolicy](https://docs.amazonaws.cn/greengrass/v1/apireference/definitions-resourceaccesspolicy.html)属性或资源的[OwnerSetting](https://docs.amazonaws.cn/greengrass/v1/apireference/definitions-ownersetting.html)属性中配置权限。

 

### 函数<function-arn>指的是具有<resource-id>\\ “rw\\” 权限的 Machine Learning 资源，而资源所有者设置 GroupPermission 仅允许\\ “ro\\”。
<a name="container-lambda-invalid-rw-permissions"></a>

**解决方案：**如果为附加的 Lambda 函数定义的访问权限超过为机器学习资源定义的资源所有者权限，则会收到此错误。要解决此问题，请为 Lambda 函数设置限制更多的权限或为资源所有者设置限制较少的权限。

 

### NoContainer 函数<function-arn>是指嵌套目标路径的资源。
<a name="nocontainer-lambda-nested-destination-path"></a>

**解决方案：**如果附加到非容器化 Lambda 函数的多个机器学习资源使用相同的目标路径或嵌套的目标路径，则会收到此错误。要解决此问题，请为资源指定单独的目标路径。

 

### Lambda <function-arn> 通过共享同一组所有者 ID 获得对资源 <resource-id> 的访问权限
<a name="lambda-runas-and-resource-owner"></a>

**解决方案：**如果将相同的操作系统组指定为 Lambda 函数的[运行方式](lambda-group-config.md#lambda-access-identity)身份和机器学习资源的[资源所有者](access-ml-resources.md#ml-resource-owner)，但该资源未附加到 Lambda 函数，您会 `runtime.log` 在中收到此错误。此配置为 Lambda 函数提供了隐式权限，无需 Amazon IoT Greengrass 授权即可使用这些权限访问资源。

要解决此问题，请为其中一个属性使用不同的操作系统组，或将机器学习资源附加到 Lambda 函数。

## Amazon IoT Greengrass Docker 问题中的核心
<a name="gg-troubleshooting-dockerissues"></a>

使用以下信息来帮助解决在 Docker 容器中运行 Amazon IoT Greengrass 核心时遇到的问题。

**Topics**
+ [错误：未知选项：-no-include-email。](#docker-troubleshooting-cli-version)
+ [警告：IPv4 处于禁用状态。网络将不起作用。](#docker-troubleshooting-ipv4-disabled)
+ [错误：防火墙阻止 Windows 和容器之间的文件共享。](#docker-troubleshooting-firewall)
+ [错误：调用 GetAuthorizationToken 操作时出现错误 (AccessDeniedException)：用户：arn: aws: iam::: user/ <account-id><user-name>无权在资源上执行：ecr:: GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [错误：无法为服务 greengrass 创建容器：冲突。容器名称“/aws-iot-greengrass”已在使用中。](#troubleshoot-docker-name-conflict)
+ [错误：[FATAL] - 由于意外错误，无法重置线程的 mount 命名空间：“操作不被允许”。为了保持一致性，GGC 将崩溃，需要手动重新启动。](#troubleshoot-docker-container-lambda)

 

### 错误：未知选项：-no-include-email。
<a name="docker-troubleshooting-cli-version"></a>

**解决方案：**运行 `aws ecr get-login` 命令时，可能会出现此错误。确保安装了最新 Amazon CLI 版本（例如，运行:`pip install awscli --upgrade --user`）。如果您使用的是 Windows，并且您已使用 MSI 安装程序安装 CLI，则必须重复安装过程。有关更多信息，请参阅*Amazon Command Line Interface 用户指南*中的[在 Microsoft Windows 上安装 Amazon Command Line Interface](https://docs.amazonaws.cn/cli/latest/userguide/awscli-install-windows.html)。

 

### 警告：IPv4 处于禁用状态。网络将不起作用。
<a name="docker-troubleshooting-ipv4-disabled"></a>

**解决方案：**在 Linux 计算机 Amazon IoT Greengrass 上运行时，您可能会收到此警告或类似消息。按照本[步骤](run-gg-in-docker-container.md#docker-linux-enable-ipv4)中的说明启用 IPv4 网络转发。 Amazon IoT Greengrass 未启用 IPv4 转发时，云部署和 MQTT 通信不起作用。有关更多信息，请参阅 Docker 文档中的[在运行时配置具有命名空间的内核参数 (sysctls)](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime)。

 

### 错误：防火墙阻止 Windows 和容器之间的文件共享。
<a name="docker-troubleshooting-firewall"></a>

**解决方案：**在 Windows 计算机上运行 Docker 时，您可能会收到此错误或 `Firewall Detected` 消息。如果您登录虚拟私有网络 (VPN) 并且网络设置阻止挂载共享驱动器，也会出现此错误。在这种情况下，请关闭 VPN 并重新运行 Docker 容器。

 

### 错误：调用 GetAuthorizationToken 操作时出现错误 (AccessDeniedException)：用户：arn: aws: iam::: user/ <account-id><user-name>无权在资源上执行：ecr:: GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

如果您没有足够权限来访问 Amazon ECR 存储库，则运行 `aws ecr get-login-password` 命令时可能会收到此错误。有关更多信息，请参阅*Amazon ECR 用户指南*中的 [Amazon ECR 存储库策略示例](https://docs.amazonaws.cn/AmazonECR/latest/userguide/repository-policy-examples.html)和[访问 One Amazon ECR 存储库](https://docs.amazonaws.cn/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html)。

 

### 错误：无法为服务 greengrass 创建容器：冲突。容器名称“/aws-iot-greengrass”已在使用中。
<a name="troubleshoot-docker-name-conflict"></a>

**解决方案：**当较旧的容器使用该容器名称时，可能会发生此错误。要解决此问题，请运行以下命令以删除旧的 Docker 容器：

```
docker rm -f $(docker ps -a -q -f "name=aws-iot-greengrass")
```

 

### 错误：[FATAL] - 由于意外错误，无法重置线程的 mount 命名空间：“操作不被允许”。为了保持一致性，GGC 将崩溃，需要手动重新启动。
<a name="troubleshoot-docker-container-lambda"></a>

**解决方案：**当您尝试将 `GreengrassContainer` Lambda 函数部署到 Docker 容器中运行的 Amazon IoT Greengrass 核心时，可能会发生此错误。`runtime.log`目前，只有 `NoContainer` Lambda 函数可以部署到 Greengrass Docker 容器。

要解决此问题，[请确保所有 Lambda 函数处于 `NoContainer` 模式](lambda-group-config.md#change-containerization-lambda)并启动新的部署。然后，在启动容器时，不要将现有`deployment`目录绑定到 Amazon IoT Greengrass 核心 Docker 容器上。相反，在它的位置创建一个空 `deployment` 目录，并将该目录绑定挂载到 Docker 容器中。这样，新的 Docker 容器就可以接收具有在 `NoContainer` 模式下运行的 Lambda 函数的最新部署。

有关更多信息，请参阅 [Amazon IoT Greengrass 在 Docker 容器中运行](run-gg-in-docker-container.md)。

## 使用日志排查问题
<a name="troubleshooting-logs"></a>

您可以为 Greengrass 组配置日志设置，例如是将日志发送到日志，还是将日志 CloudWatch 存储在本地文件系统上，或者两者兼而有之。要在排查问题时获取详细信息，您可以暂时将日志记录级别更改为 `DEBUG`。对日志记录设置所做的更改在部署组时生效。有关更多信息，请参阅 [配置日志记录 Amazon IoT Greengrass](greengrass-logs-overview.md#config-logs)。

在本地文件系统上，将日志 Amazon IoT Greengrass 存储在以下位置。阅读文件系统上的日志需要根权限。

`{{greengrass-root}}/ggc/var/log/crash.log`  
显示内 Amazon IoT Greengrass 核崩溃时生成的消息。

`{{greengrass-root}}/ggc/var/log/system/runtime.log`  
显示有关哪些组件失败的消息。

`{{greengrass-root}}/ggc/var/log/system/`  
包含来自 Amazon IoT Greengrass 系统组件（例如证书管理器和连接管理器）的所有日志。通过使用`ggc/var/log/system/`和中的消息`ggc/var/log/system/runtime.log`，您应该能够找出 Amazon IoT Greengrass 系统组件中发生了哪个错误。

`{{greengrass-root}}/ggc/var/log/system/localwatch/`  
包含处理将 Greengrass 日志上传到日志的 Amazon IoT Greengrass 组件的日志。 CloudWatch 如果您无法查看 Greengrass 登录信息，则可以使用这些日志 CloudWatch进行故障排除。

`{{greengrass-root}}/ggc/var/log/user/`  
包含来自用户定义的 Lambda 函数的所有日志。检查此文件夹以查找来自您的本地 Lambda 函数的错误消息。

**注意**  
默认情况下，{{greengrass-root}} 为 `/greengrass` 目录。如果配置了[写入目录](gg-core.md#write-directory)，则日志位于该目录中。

如果将日志配置为存储在云上，请使用 CloudWatch 日志查看日志消息。 `crash.log`只能在 Amazon IoT Greengrass 核心设备上的文件系统日志中找到。

如果配置 Amazon IoT 为写入日志 CloudWatch，则如果系统组件尝试连接时出现连接错误，请检查这些日志 Amazon IoT。

有关 Amazon IoT Greengrass 日志记录的更多信息，请参阅[使用 Amazon IoT Greengrass 日志进行监控](greengrass-logs-overview.md)。

**注意**  
 Amazon IoT Greengrass 核心软件 v1.0 的日志存储在`{{greengrass-root}}/var/log`目录下。

## 排查存储问题
<a name="troubleshooting-storage"></a>

当本地文件存储空间已满时，某些组件可能会开始失败：
+ 本地影子更新未进行。
+ 无法在本地下载新的 Amazon IoT Greengrass 核心 MQTT 服务器证书。
+ 部署失败。

您应该始终留意本地的可用空间大小。您可以基于已部署的 Lambda 函数的大小、日志记录配置（请参阅 [使用日志排查问题](#troubleshooting-logs)）和在本地存储的影子的数量计算可用空间。

## 对消息进行问题排查
<a name="troubleshooting-messages"></a>

在本地发送的所有消息 Amazon IoT Greengrass 均以 QoS 0 发送。默认情况下，将消息 Amazon IoT Greengrass 存储在内存队列中。因此，在 Greengrass 核心重新启动时，未处理的消息将会丢失；例如，在组部署或设备重启后。但是，您可以配置 Amazon IoT Greengrass （v1.6 或更高版本）以将消息缓存到文件系统，以便它们在核心重启后仍然存在。您也可以配置队列大小。如果配置队列大小，请确保它大于或等于 262144 字节 (256 KB)。否则， Amazon IoT Greengrass 可能无法正常启动。有关更多信息，请参阅 [云目标的 MQTT 消息队列](gg-core.md#mqtt-message-queue)。

**注意**  
在使用默认内存中队列时，我们建议您部署组或在服务中断最少的情况下重新启动设备。

您还可以配置核心以建立与 Amazon IoT的持久会话。这允许内核在离线 Amazon Web Services 云 时接收从内核发送的消息。有关更多信息，请参阅 [使用 MQTT 持续会话 Amazon IoT Core](gg-core.md#mqtt-persistent-sessions)。

## 影子同步超时问题排查
<a name="troubleshooting-shadow-sync"></a>

如果 Greengrass 核心设备和云之间的通信明显延迟，则影子同步可能因超时而失败。在这种情况下，您应会看到如下所示的日志条目：

```
[2017-07-20T10:01:58.006Z][ERROR]-cloud_shadow_client.go:57,Cloud shadow client error: unable to get cloud shadow what_the_thing_is_named for synchronization. Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
[2017-07-20T10:01:58.006Z][WARN]-sync_manager.go:263,Failed to get cloud copy: Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
[2017-07-20T10:01:58.006Z][ERROR]-sync_manager.go:375,Failed to execute sync operation {what_the_thing_is_named VersionDiscontinued []}"
```

一种可能的解决方法是配置核心设备等待主机响应的时长。在 `{{greengrass-root}}/config` 中打开 [config.json](gg-core.md#config-json) 文件并为 `system.shadowSyncTimeout` 字段添加一个超时值（以秒为单位）。例如：

```
{
  "system": {
    "shadowSyncTimeout": 10
  },
  "coreThing": {
    "caPath": "root-ca.pem",
    "certPath": "cloud.pem.crt",
    "keyPath": "cloud.pem.key",
    ...
  },
  ...
}
```

如果未在 `config.json` 中指定 `shadowSyncTimeout` 值，则默认值为 5 秒。

**注意**  
对于 Amazon IoT Greengrass Core 软件 v1.6 及更早版本，默认值`shadowSyncTimeout`为 1 秒。

## 查看 re: P Amazon ost
<a name="troubleshooting-repost"></a>

如果您无法使用本主题中的疑难解答信息来解决问题，则可以在 re [Amazon : Pos Amazon IoT Greengrass t 上](https://repost.aws/tags/TA4ckIed1sR4enZBey29rKTg/aws-io-t-greengrass)搜索[故障排除 Amazon IoT Greengrass](#gg-troubleshooting)或查看相关问题或发布新问题。 Amazon IoT Greengrass 团队成员积极监控 re Amazon : Post。