查看和执行公共命令
公共命令是由阿里云提供给所有用户使用的云助手命令,适用于软件的安装或卸载、实例状态诊断、密钥轮转等场景。本文为您介绍如何查看和执行云助手公共命令。
背景信息
公共命令是阿里云创建的云助手命令,对所有阿里云用户可见。通常包含一些比较复杂的服务器配置、健康或安全检测、应用安装、文件处理、系统补丁安装、更改系统配置、服务或应用管理的脚本,以及云助手插件(包含脚本或可执行程序)。
相比较普通命令,公共命令的内容、发布以及升级会由阿里云统一负责维护。公共命令发布后,您可以直接查看命令的详细内容,并可以在ECS实例上执行命令及查看执行进度和结果,例如,一键升级Linux实例中的云助手Agent、一键安装Java、一键诊断Linux实例是否需要进行磁盘扩容操作等。使用公共命令,可以快速地完成某些复杂配置,很大程度提升您的操作和运维效率。
操作步骤
ECS管理控制台方式
- 登录ECS管理控制台。
- 在左侧导航栏,选择 。
- 在顶部菜单栏左上角处,选择地域。
在ECS云助手页面,单击公共命令页签。
找到待执行的公共命令,在右侧对应操作列下,单击执行。
说明公共命令首页仅展示最新版本的公共命令,若需要查看或执行历史版本的公共命令,请找到对应的公共命令并单击命令ID进入命令详情页操作。
在执行命令面板中,配置相关参数并单击执行。
主要配置参数如下所示:
说明执行公共命令所需配置参数的更多信息,请参见控制台操作。
区域
参数名称
描述
命令信息
命令内容
单击查看命令内容确认命令内容。
执行计划
选择公共命令的执行计划,选择项如下所示:
立即执行
系统下一次启动后
系统每次启动后
定时执行
关于执行计划的更多信息,请参见执行计划详细信息。
执行用户
在ECS实例中执行命令的用户名称,例如root。
默认情况下,在Linux实例中以root用户执行命令,在Windows实例中以System用户执行命令。
超时时间
请输入正整数,可设定超时范围为10~86400秒(24小时),超时后,会强制终止发送进程(默认为命令本身的超时时间)。
命令参数
如果页面出现命令参数项,请您在对应文本框中输入自定义参数值,具体以实际面板显示为准。
说明若公共命令提供方提供了参数描述、默认值或可选值,请按照提示填写。若参数为必填项,您需要输入具体参数值才可以执行。
选择实例
-
选择一台或多台需要执行命令的实例,该实例需处于运行中状态且已安装云助手的客户端。
选择托管实例
-
选择要执行命令的托管实例,托管实例需处于连接状态且已安装云助手的客户端。
说明托管实例是云助手托管的非阿里云服务器,更多信息,请参见混合云托管服务器。
在命令执行结果页签下,找到已执行成功的公共命令,单击对应操作列下的查看。
在执行详情页面,实例的执行状态为执行成功时,可查看公共命令的执行输出结果。
说明如果公共命令执行失败,请查看错误信息并根据诊断信息修复问题,更多信息,请参见执行失败常见错误及修复建议。
OpenAPI方式
通过OpenAPI查看公共命令。
您可以通过调用API DescribeCommands接口查看公共命令,还可以直接使用公共命令名称进行查询。
本方式以查看杭州地域的公共命令
ACS-ECS-DiskResize-Diagnostic-for-linux.sh
为例,示例代码如下所示:import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.ecs.model.v20140526.*; public class DescribeCommands { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); DescribeCommandsRequest request = new DescribeCommandsRequest(); request.setRegionId("cn-hangzhou"); request.setName("ACS-ECS-DiskResize-Diagnostic-for-linux.sh"); try { DescribeCommandsResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
以查看公共命令
ACS-ECS-DiskResize-Diagnostic-for-linux.sh
的执行结果为例,返回的部分示例如下所示:{ "TotalCount": 1, "PageSize": 10, "RequestId": "2C23A5BA-66CF-5B70-BB1C-524AD75D****", "PageNumber": 1, "Commands": { "Command": [ { "Description": "诊断Linux实例是否需要进行磁盘扩容操作", "Category": "阿里云-云服务器-管控诊断系统\t", "ParameterNames": { "ParameterName": [] }, "ParameterDefinitions": { "ParameterDefinition": [] }, "Timeout": 60, "Provider": "AlibabaCloud.ECS.Diagnosis", "Name": "ACS-ECS-DiskResize-Diagnostic-for-linux.sh", "WorkingDir": "", "CommandContent": "IyEvYmluL2Jhc2gKIyBQcm92aWRlZCBieSBBbGliYWJhIENsb3VkIEVDUyBEaWFnbm9zdGljIFNlcnZpY2UKIyBSZXR1cm46IHRydWU6IFlvdSBuZWVkIHRvIGV4ZWN1dGUgc29tZSBjb21tYW5kIHRvIHJlc2l6ZSB5b3VyIGRpc2ssIHBsZWFzZSByZWZlciBodHRwczovL2hlbHAuYWxpeXVuLmNvbS9kb2N1bWVudF9kZXRhaWwvMTEzMzE2Lmh0bWwuCiMgZmFsc2U6IE5vdGluZyB5b3UgbmVlZCB0byBkby4KIyBWZXJzaW9uOiAxLjAKCnJlYWxEaXNrU2l6ZT1gZmRpc2sgLWx1IHwgZ3JlcCAnRGlzayAvZGV2JyB8IGF3ayAne3ByaW50ICQzfScgfCBhd2sgJ3t4Kz0kMX1FTkR7cHJpbnQgeH0nYAoKZWZmZWN0aXZlRGlza1NpemU9YGRmIC1oIHwgYXdrICd7TkY9Mn0xJyB8IGdyZXAgJy9kZXYvJyB8IGF3ayAne3ByaW50ICQyfScgfCBncmVwIC1vICdbWzpkaWdpdDpdXVwrJyB8IGF3ayAne3grPSQxfUVORHtwcmludCB4fSdgCgpzdWJzdHJhY3Rpb249YGVjaG8gIiRyZWFsRGlza1NpemUgLSAkZWZmZWN0aXZlRGlza1NpemUiIHwgYmNgCgpzdWJzdHJhY3Rpb25QZXJjZW50PWBlY2hvICJzY2FsZT00OyAkc3Vic3RyYWN0aW9uIC8gJHJlYWxEaXNrU2l6ZSIgfCBiY2AKCmlmIFsgYGVjaG8gIiRzdWJzdHJhY3Rpb25QZXJjZW50PjAuMiIgfCBiY2AgLWVxIDEgXQp0aGVuCgllY2hvICJ0cnVlIgplbHNlCgllY2hvICJmYWxzZSIKZmk=", "Type": "RunShellScript", "Version": 1, "InvokeTimes": 265, "CreationTime": "2022-04-22T02:34Z", "Latest": true, "EnableParameter": false, "CommandId": "c-hz02hthgomejtvk" "Tags": { "Tag": [] } } ] } }
通过OpenAPI执行公共命令。
根据上述步骤1返回的
CommandId
参数值,您可以通过调用API InvokeCommand执行云助手公共命令,还可以直接使用命令名称执行公共命令,公共命令的名称在不同地域是相同的。本方式以执行杭州地域的公共命令
ACS-ECS-DiskResize-Diagnostic-for-linux.sh
为例,介绍执行云助手公共命令的方法。示例代码如下所示:import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.ecs.model.v20140526.*; public class InvokeCommand { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); InvokeCommandRequest request = new InvokeCommandRequest(); request.setCommandId("ACS-ECS-DiskResize-Diagnostic-for-linux.sh"); //输入公共命名的名称。 request.setRegionId("cn-hangzhou"); //地域ID以cn-hangzhou为例。 List<String> instanceIdList = new ArrayList<String>(); instanceIdList.add("i-bp1czdx85x4yivyq****"); request.setInstanceIds(instanceIdList); try { InvokeCommandResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
调用成功后,会获取一个返回参数
InvokeId
,即公共命令的执行ID,返回示例如下所示:{ "RequestId": "D0630B5E5-CF9D-5B9F-9AE8-8C3566D1****", "InvokeId": "t-hz02kwqc9pg****" }
您可以在公共命令执行详情页的输出结果中,查看Linux实例是否需要进行磁盘扩容操作的详细说明。
CLI方式
通过CLI查看公共命令。
您可以通过DescribeCommands接口查看公共命令。
当
Provider
参数为AlibabaCloud
时,表示查询由阿里云提供的所有公共命令。本方式以查询杭州地域的公共命令ACS-ECS-DiskResize-Diagnostic-for-linux.sh
为例,该公共命令用来诊断Linux实例是否需要进行磁盘扩容操作。示例如下所示:aliyun ecs DescribeCommands --region cn-hangzhou --RegionId cn-hangzhou --CommandId ACS-ECS-DiskResize-Diagnostic-for-linux.sh
可选检查ECS实例的状态。
如果ECS实例的状态是运行中状态,跳过此步骤。
如果ECS实例的状态不是运行中状态,调用StartInstances接口启动目标ECS实例。
启动实例ID为
i-bp1f4f6o8lv0wqof****
的实例信息,示例如下所示:aliyun ecs StartInstance --InstanceId 'i-bp1f4f6o8lv0wqof****'
查询目标ECS实例是否安装了云助手Agent。
调用DescribeCloudAssistantStatus接口查询实例是否安装了云助手Agent,更多信息,请参见DescribeCloudAssistantStatus。
查询实例ID为
i-bp1f4f6o8lv0wqof****
的实例是否安装云助手,示例如下所示:aliyun ecs DescribeCloudAssistantStatus --RegionId 'cn-hangzhou' \ --InstanceId.1 'i-bp1f4f6o8lv0wqof****'
如果返回参数
CloudAssistantStatus
为true
时,表示目标实例已安装云助手Agent。如果返回参数
CloudAssistantStatus
为false
时,表示目标实例未安装云助手Agent。请您调用InstallCloudAssistant接口为实例安装客户端。更多信息,请参见InstallCloudAssistant。
通过CLI执行公共命令。
调用InvokeCommand接口为一台或多台ECS实例执行云助手公共命令。更多信息,请参见InvokeCommand。
以公共命令
ACS-ECS-DiskResize-Diagnostic-for-linux.sh
为例,该公共命令用来诊断Linux实例是否需要进行磁盘扩容操作。示例如下所示:aliyun ecs InvokeCommand --RegionId 'cn-hangzhou' \ --InstanceId.1 'i-bp1f4f6o8lv0wqof****' \ --InstanceId.2 'i-bp137qu6142s3mhm****' \ --CommandId 'ACS-ECS-DiskResize-Diagnostic-for-linux.sh' \ --Timed 'false'
调用成功后,会获取一个返回参数
InvokeId
(例如t-7d2a745b412b4601b2d47f6a768d****
),即公共命令的执行ID。您可以调用DescribeInvocations或DescribeInvocationResults接口查询云助手命令执行结果。更多信息,请参见DescribeInvocations或DescribeInvocationResults。您可以在公共命令执行详情页的输出结果中,查看Linux实例是否需要进行磁盘扩容操作的详细说明。