当需要对实例执行重复性运维任务时,例如安装软件、更新配置、采集日志等,手动登录每台实例操作效率低下、容易出错。云助手支持通过脚本(如 Shell、PowerShell)在多台目标实例上安全、可靠地执行任务。
操作步骤
控制台
访问ECS控制台-云助手。
在页面左侧顶部,选择目标资源所在的资源组和地域。
在ECS 云助手页面右上角,单击创建/执行命令。
在命令信息区域,完成以下配置:
命令内容:可开启使用参数。
命令内容在Base64编码后,选择执行并保存命令时不能超过18 KB,选择执行时不能超过24 KB。
自定义参数:使用
{{parameter}}
格式定义参数,手动赋值,能满足动态取值以及一值多用的场景。内置参数:云助手提供了一些内置参数,无需手动赋值,可在执行时自动替换,例如
{{ACS::RegionId}}
(地域 ID)、{{ACS::InstanceId}}
(实例 ID)等。
#!/bin/bash # 示例 # {{name}}是自定义参数,需要在命令内容编写完成后进行手动赋值 echo {{name}} # {{ACS::RegionId}}是内置参数,无需手动赋值 echo {{ACS::RegionId}}
执行计划:
仅预检:只预检此次请求,命令内容不会实际生效,检查项包括请求参数、实例执行环境、云助手Agent运行状态等。
定时执行:
固定时间间隔执行:基于Rate表达式,仅适用于固定的时间间隔。
设置的时间间隔不大于7天、不小于60秒,且需大于定时任务的超时时间。
基于时钟定时执行:基于Cron表达式,配置灵活,适用于较复杂的定时任务执行场景。
执行用户:默认为
root
(Linux) 或System
(Windows)。建议遵循最小权限原则,使用普通用户执行。执行路径:脚本在实例内的执行目录。Linux 默认在
/root
目录下,Windows 默认在C:\Windows\system32
目录下。为确保脚本在预期路径下执行,建议在脚本开头使用cd
命令切换目录。超时时间:默认为 60 秒。可设定超时范围为10~86400秒(24小时)。
任务终止模式:
脚本进程:停止任务时会终止脚本进程。
进程树:停止任务时会终止进程树(脚本进程以及它创建的所有子进程的集合)。
在选择实例或者选择托管实例区域,选中需要执行命令的目标实例。
可选择多台实例,最多支持100台。
单击执行并保存或执行,开始执行任务。
CLI
准备命令内容
RunCommand
接口支持将CommandContent
参数值设置为明文内容或 Base64 编码后的内容。Base64 编码后的内容,则必须设置ContentEncoding
参数为Base64
。使用以下命令对脚本内容进行Base64编码:Linux / macOS
# 编码字符串 "hello world" # 使用 -n 来避免末尾的换行符被编码 echo -n "hello world" | base64 # 输出: aGVsbG8gd29ybGQ=
Windows (PowerShell)
# 编码字符串 "hello world" [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("hello world")) # 输出: aGVsbG8gd29ybGQ=
执行命令
使用
aliyun ecs RunCommand
命令执行。参数说明,请参见RunCommand。示例 1:在单台实例上立即执行命令
# 将 "yum -y update" Base64编码后为 "eXVtIC15IHVwZGF0ZQ==" aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \
示例 2:在多台实例上批量执行命令
# 重复使用 --InstanceId.N 参数指定多个实例 aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \ --InstanceId.2 'i-bp1************de02' \ --InstanceId.3 'i-bp1************de03'
示例 3:创建 Cron 定时任务
# Frequency 参数使用 Cron 表达式和时区 # 示例:在上海时区,2024 年每天中午 12:00 执行 aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --RepeatMode 'Period' \ --Frequency '0 0 12 * * ? 2024 Asia/Shanghai' \ --InstanceId.1 'i-bp1************de01'
查询执行结果
RunCommand
会返回InvokeId
,使用aliyun ecs DescribeInvocationResults
命令和InvokeId
查询详细结果。参数说明,请参见DescribeInvocationResults。# 将 t-hz018qlm86d**** 替换为您的 InvokeId aliyun ecs DescribeInvocationResults --RegionId 'cn-hangzhou' --InvokeId '<invoke_id>'
返回结果中的
Output
字段即为脚本的标准输出(STDOUT),ErrorInfo
或ErrorMsg
字段则包含错误信息。
配额与限制
生产应用建议
常见问题
Q:如何检查 ECS 实例上的云助手 Agent 版本?
A:支持通过控制台或者登录实例内部查看云助手版本。具体步骤,请参见查看ECS实例的云助手Agent信息。
Q:创建了一个固定时间间隔执行的定时任务,它是会立即执行一次,还是会等待10分钟后才首次执行?
A:任务不会在创建后立即执行,将在设定的时间间隔过后首次执行,并且执行间隔只基于固定频率,与任务实际执行需要的时间无关。如果您在上午10:00创建了一个每10分钟执行一次的任务,那么它的首次执行时间将会是上午10:10,第二次执行时间是10:20,以此类推。
Q:命令执行失败,如何排查?
A:1. 在控制台的执行结果页面查看详细的Output
日志,分析脚本的报错信息。
2. 检查命令执行用户是否对相关文件或目录有读写执行权限。
3. 确认脚本语法是否正确,是否能在实例上本地手动执行成功。
4. 检查实例状态是否为运行中,网络是否正常。
5. 如果返回ClientNeedUpgrade
错误,请先检查并升级云助手Agent。
更多信息,请参见查看执行结果及修复常见问题。