文档平台 云服务器 运维指南 Linux 运维 首次启动实例时运行命令

首次启动实例时运行命令

最近更新时间:2018-08-06 15:41:53

查看pdf

云服务器支持在 首次启动实例 时,通过传递文本(文本格式不限)的方式将用户数据传递到云服务器中,并执行该文本。
本文以 Linux 云服务器为例,通过传递 Shell 格式的脚本,在云服务器首次启动时,实现输出"Hello Tencent Cloud"。
Cloud-init 输出的日志文件(/var/log/cloud-init-output.log)将捕获控制台输出。

注意事项

  • 通过传递文本执行命令的操作,仅限首次启动云服务器时进行。
  • 传递的文本必须经过 Base64 编码。请在 Linux 环境下进行编码,避免格式不兼容
  • 作为用户数据输入的文本是作为 root 用户执行的,因此在脚本中不使用 sudo 命令。请注意,您创建的任何文件都将归 root 所有;如果您需要非根用户具有文件访问权,应在脚本中相应地修改权限。
  • 在启动时添加这些任务会增加启动服务器所需的时间。建议您多等待几分钟让这些任务完成,然后测试是否已成功执行。
  • 本示例中,Shell 脚本必须以#!字符以及指向要读取脚本的解释器的路径(通常为/bin/bash)开头。

步骤 1:编写 Shell 脚本

#!/bin/bash
echo "Hello Tencent Cloud."

注意:
Shell 脚本必须以#!字符以及指向要读取脚本的解释器的路径(通常为/bin/bash)开头。有关 Shell 脚本的更多介绍,请参阅 Linux 文档项目 (tldp.org) 的 BASH 编程方法

步骤 2:使用 Base64 编码脚本文件

注意:
请在 Linux 环境下进行编码,避免格式不兼容。

此处假设,第一步创建的脚本文件为 script_text,在 Linux 环境下,可以使用 Base64 命令编码文件,如下:

# 对脚本进行Base64编码操作
base64 script_text

# 编码之后的结果:
IyEvYmluL2Jhc2gKCmVjaG8gIldlbGNvbWUgVG8gVGVuY2VudCBDbG91ZC4iCg==

# 对返回的结果进行Base64解码,以验证是否为需要执行的命令
echo "IyEvYmluL2Jhc2gKZWNobyAiSGVsbG8gVGVuY2VudCBDbG91ZC4iCg==" | base64 -d

步骤 3:传递文本

我们提供多种启动实例的方式,主要分以下两种情况介绍,请根据您的实际情况进行选择:

通过官网或控制台传递

当您通过腾讯云官网或控制台创建云服务器时,在 4.设置安全组和主机 这一步,请选择 高级设置,在自定义数据项中填写您在步骤二中,编码之后的结果(例如本示例中的IyEvYmluL2Jhc2gKCmVjaG8gIldlbGNvbWUgVG8gVGVuY2VudCBDbG91ZC4iCg==)完成创建并启动云服务器即可。
腾讯云服务器将通过开源软件 cloud-init 执行脚本。有关 cloud-init 的更多内容,请参阅 cloud-init 官方网站

通过 API 传递

当您通过 API 创建云服务器时,可以把步骤二中编码之后的结果赋值给 RunInstances 接口的 UserData 参数,以此来传递文本。以下是一个带 UserData 参数的服务器创建请求参数示例:

https://cvm.tencentcloudapi.com/?Action=RunInstances
  &Version=2017-03-12
  &Placement.Zone=ap-guangzhou-2
  &ImageId=img-pmqg1cw7
  &UserData=IyEvYmluL2Jhc2gKCmVjaG8gIldlbGNvbWUgVG8gVGVuY2VudCBDbG91ZC4iCg==
  &<公共请求参数>