我需要 shell 脚本在不同云提供商提供的 debian 实例上运行时的行为略有不同。
我可以使用以下命令确定脚本是否在 EC2 上运行:
head -c 3 /sys/hypervisor/uuid
如果是,它将返回"EC2"。
我可以用来判断脚本是否在 Google Cloud Compute Engine 实例上运行的等效项是什么?
几种方法来发现脚本是否在 Google Compute Engine 实例中运行。
首先,如果您的脚本从 GCE 实例查询元数据服务器,则任何响应都将包含"元数据风格:Google"标头。例如,运行curl metadata.google.internal -i
将生成如下输出:
HTTP/1.1 200 OK Metadata-Flavor: Google
Content-Type: application/text
Date: Tue, 07 Nov 2017 16:33:41 GMT
Server: Metadata Server for VM
Content-Length: 22
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN 0.1/ computeMetadata/
您还可以使用 dmidecode 工具访问/proc/mem 中的 DMI/SMBIOS 信息,这允许您搜索 GCE 特定的字符串。
例如,如果从 GCE 实例运行以下命令:
sudo dmidecode -s system-product-name | grep "Google Compute Engine"
这将生成以下输出,确认您的命令正在从 GCE 实例执行:
Google Compute Engine