公共命令是由阿里云提供给所有用户使用的云助手命令,适用于软件的安装或卸载、实例状态诊断、密钥轮转等场景。本文为您介绍如何查看和执行云助手公共命令。

背景信息

公共命令是阿里云创建的云助手命令,对所有阿里云用户可见。通常包含一些比较复杂的服务器配置、健康或安全检测、应用安装、文件处理、系统补丁安装、更改系统配置、服务或应用管理的脚本,以及云助手插件(包含脚本或可执行程序)。

相比较普通命令,公共命令的内容、发布以及升级会由阿里云统一负责维护。公共命令发布后,您可以直接查看命令的详细内容,并可以在ECS实例上执行命令及查看执行进度和结果,例如,一键升级Linux实例中的云助手客户端、一键安装Java、一键诊断Linux实例是否需要进行磁盘扩容操作等等。使用公共命令,可以快速地完成某些复杂配置,很大程度提升您的操作和运维效率。

本文以公共命令ACS-ECS-DiskResize-Diagnostic-for-linux.sh为例,该公共命令用来诊断Linux实例是否需要进行磁盘扩容操作。

操作方式

方式 说明
ECS管理控制台方式 通过阿里云控制台使用云助手公共命令。
OpenAPI方式 通过调用API DescribeCommands查看公共命令,调用API InvokeCommand执行公共命令。
CLI方式 通过阿里云CLI调用API DescribeCommands查看公共命令、调用API InvokeCommand执行公共命令。

ECS管理控制台方式

  1. 登录ECS管理控制台
  2. 在左侧导航栏,选择运维与监控 > 发送命令/文件(云助手)
  3. 在顶部菜单栏左上角处,选择地域。
  4. ECS云助手页面,单击公共命令页签。
  5. 找到待执行的目标云助手公共命令,在右侧对应操作列下,单击执行
    说明 公共命令首页仅展示最新版本的公共命令,若需要查看或执行历史版本公共命令,请找到对应的公共命令并单击命令ID进入命令详情页操作。
  6. 执行命令面板中,配置相关参数并单击执行
    主要配置参数如下所示:
    说明 执行公共命令所需配置参数的更多信息,请参见控制台操作
    区域 参数名称 描述
    命令信息 命令内容 单击查看命令内容确认命令内容。
    执行计划 选择公共命令的执行计划,选择项如下所示:
    • 立即执行
    • 系统下一次启动后
    • 系统每次启动后
    • 定时执行
    关于执行计划的更多信息,请参见执行计划详细信息
    执行用户 在ECS实例中执行命令的用户名称,例如root

    默认情况下,在Linux实例中以root用户执行命令,在Windows实例中以System用户执行命令。

    命令参数 如果页面出现命令参数项,请您在对应文本框中输入自定义参数值,具体以实际面板显示为准。
    说明 若公共命令提供方提供了参数描述、默认值或可选值,请按照提示填写。若参数为必填项,您需要输入具体参数值才可以执行。
    选择实例 - 选择一台或多台需要执行命令的实例,该实例需处于运行中状态且已安装云助手的客户端。
    选择托管实例 - 选择要执行命令的托管实例,托管实例需处于连接状态且已安装云助手的客户端。
    说明 托管实例是云助手托管的非阿里云服务器,更多信息,请参见混合云托管服务器
  7. 命令执行结果页签下,找到已执行成功的公共命令,单击对应操作列下的查看
    在执行详情页面,实例的执行状态为执行成功时,可查看公共命令的执行输出结果。执行结果
    说明 如果公共命令执行失败,请查看错误信息并根据诊断信息修复问题,更多信息,请参见执行失败常见错误及修复建议

OpenAPI方式

  1. 通过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"
          }
        ]
      }
    }
  2. 通过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方式

  1. 通过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
  2. 可选检查ECS实例的状态。
    • 如果ECS实例的状态是运行中状态,跳过此步骤。
    • 如果ECS实例的状态不是运行中状态,调用StartInstances接口启动目标ECS实例。

      启动实例ID为i-bp1f4f6o8lv0wqof****的实例信息,示例如下所示:

      aliyun ecs StartInstance --InstanceId 'i-bp1f4f6o8lv0wqof****'
  3. 查询目标ECS实例是否安装了云助手客户端。
    调用DescribeCloudAssistantStatus接口查询实例是否安装了云助手客户端,更多信息,请参见DescribeCloudAssistantStatus

    查询实例ID为i-bp1f4f6o8lv0wqof****的实例是否安装云助手,示例如下所示:

    aliyun ecs DescribeCloudAssistantStatus --RegionId 'cn-hangzhou' \ 
    --InstanceId.1 'i-bp1f4f6o8lv0wqof****'
    • 如果返回参数CloudAssistantStatustrue时,表示目标实例已安装云助手客户端。
    • 如果返回参数CloudAssistantStatusfalse时,表示目标实例未安装云助手客户端。请您调用InstallCloudAssistant接口为实例安装客户端。更多信息,请参见InstallCloudAssistant
  4. 通过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接口查询云助手命令执行结果。更多信息,请参见DescribeInvocationsDescribeInvocationResults

    您可以在公共命令执行详情页的输出结果中,查看Linux实例是否需要进行磁盘扩容操作的详细说明。