All Products
Search
Document Center

Elastic Compute Service:Hentikan atau mulai ulang instans dengan perintah Cloud Assistant

Last Updated:May 16, 2026

Gunakan exit code Cloud Assistant untuk menghentikan atau memulai ulang instance ECS, dengan opsi operasi batch melalui konsol, OpenAPI, dan OOS.

Prasyarat

(Disarankan) Hentikan atau mulai ulang instans dengan exit code

Tambahkan exit code di akhir perintah Cloud Assistant Anda untuk menghentikan atau memulai ulang instans. Tanpa exit code, Cloud Assistant Agent tidak dapat melaporkan hasil eksekusi, dan status perintah mungkin tidak diperbarui dengan benar.

Penting

Cloud Assistant Agent pada instans target harus memiliki versi:

  • Linux: 2.2.3.317

  • Windows: 2.2.3.317

Jika terjadi error, perbarui Cloud Assistant Agent ke versi terbaru. Lihat Tingkatkan atau nonaktifkan peningkatan otomatis Cloud Assistant Agent.

  1. Buka Konsol ECS - Cloud Assistant.

  2. Di pojok kiri atas halaman, pilih wilayah dan kelompok sumber daya.地域

  3. Klik Create/Run Command.

  4. Pada bagian Command Information, konfigurasikan parameter. Lihat Buat dan jalankan perintah.

  5. Di akhir Command, tambahkan exit code yang sesuai.

    • Untuk menghentikan instans, gunakan salah satu exit code berikut.

      Sistem operasi

      Exit code

      Contoh perintah

      Linux

      193

      # Perintah Shell ini mengembalikan exit code 193, yang memicu aksi untuk menghentikan instans.
      exit 193

      Windows

      3009

      # Perintah PowerShell ini mengembalikan exit code 3009, yang memicu aksi untuk menghentikan instans.
      exit 3009
    • Untuk memulai ulang instans, gunakan salah satu exit code berikut.

      Sistem operasi

      Exit code

      Contoh perintah

      Linux

      194

      # Perintah Shell ini mengembalikan exit code 194, yang memicu aksi untuk memulai ulang instans.
      exit 194

      Windows

      3010

      # Perintah PowerShell ini mengembalikan exit code 3010, yang memicu aksi untuk memulai ulang instans.
      exit 3010
  6. Pada bagian Select Instance atau Select Managed Instances, pilih instans tempat Anda ingin menjalankan perintah.

    Catatan

    Instans terkelola bukan disediakan oleh Alibaba Cloud, tetapi dikelola oleh Cloud Assistant. Lihat Instans yang dikelola oleh Alibaba Cloud.

  7. Klik Run and Save atau Run untuk segera menjalankan perintah.

Mulai ulang instans secara batch dengan OpenAPI

Jalankan kode Python di lingkungan Linux lokal untuk memanggil operasi OpenAPI yang mengeksekusi perintah dan memulai ulang instans secara batch.

  1. Siapkan informasi yang diperlukan.

    1. Dapatkan pasangan AccessKey Pengguna RAM. Lihat Buat pasangan kunci akses.

    2. Panggil DescribeRegions untuk mengambil daftar wilayah. Lihat DescribeRegions.

    3. Panggil DescribeInstances untuk memfilter instans yang memenuhi kondisi tertentu. Lihat DescribeInstances.

  2. Konfigurasikan lingkungan lokal dan jalankan kode contoh.

    1. Instal atau tingkatkan Alibaba Cloud SDK untuk Python.

      sudo pip install --upgrade alibabacloud_ecs20140526
    2. Buat file .py dan tambahkan kode contoh berikut.

      Klik untuk melihat kode contoh

      # coding=utf-8
      # Jika SDK Python belum diinstal, jalankan 'sudo pip install alibabacloud_ecs20140526'.
      # Pastikan Anda menggunakan versi SDK terbaru.
      # Jalankan 'sudo pip install --upgrade alibabacloud_ecs20140526' untuk meningkatkan.
      
      import base64
      import logging
      import os
      import sys
      import time
      
      from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
      from alibabacloud_ecs20140526.models import (
          DescribeInvocationResultsRequest,
          DescribeInstancesRequest,
          RunCommandRequest,
          RebootInstancesRequest
      )
      from alibabacloud_tea_openapi.models import Config
      
      # Konfigurasikan formatter output log.
      logging.basicConfig(level=logging.INFO,
                          format="%(asctime)s %(name)s [%(levelname)s]: %(message)s",
                          datefmt='%m-%d %H:%M')
      
      logger = logging.getLogger()
      
      # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur di lingkungan runtime.
      # Jika kode proyek Anda bocor, pasangan AccessKey Anda mungkin dikompromikan, sehingga mengancam keamanan semua sumber daya di akun Anda. Kode contoh berikut menggunakan variabel lingkungan untuk mendapatkan pasangan AccessKey. Metode ini hanya sebagai referensi. Untuk keamanan lebih baik, gunakan token STS.
      access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
      access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
      region_id = '<yourRegionId>'  # Masukkan ID wilayah yang Anda peroleh.
      
      ecs_config = Config(
          access_key_id=access_key,
          access_key_secret=access_key_secret,
          endpoint=f'ecs.{region_id}.aliyuncs.com'
      )
      client = Ecs20140526Client(ecs_config)
      
      
      def base64_decode(content, code='utf-8'):
          if sys.version_info.major == 2:
              return base64.b64decode(content)
          else:
              return base64.b64decode(content).decode(code)
      
      
      def get_invoke_result(invoke_id):
          request = DescribeInvocationResultsRequest(
              region_id=region_id,
              invoke_id=invoke_id
          )
          response = client.describe_invocation_results(request)
          response_details = response.body.invocation.invocation_results.invocation_result
          dict_res = {detail.instance_id: {"status": detail.invocation_status,
                                           "output": base64_decode(detail.output)} for detail in
                      response_details}
          return dict_res
      
      
      def get_instances_status(instance_ids):
          request = DescribeInstancesRequest(
              region_id=region_id,
              instance_ids=str(instance_ids)
          )
          response = client.describe_instances(request)
          response_details = response.body.instances.instance
          dict_res = {detail.instance_id: {"status": detail.status} for detail in response_details}
          return dict_res
      
      
      def run_command(cmdtype, cmdcontent, instance_ids, timeout=60):
          """
          cmdtype: Jenis perintah. Nilai yang valid: RunBatScript, RunPowerShellScript, dan RunShellScript.
          cmdcontent: Konten perintah.
          instance_ids: Daftar ID instans.
          """
          try:
              request = RunCommandRequest(
                  region_id=region_id,
                  type=cmdtype,
                  command_content=cmdcontent,
                  instance_id=instance_ids,
                  timeout=timeout  # Batas waktu eksekusi perintah dalam detik. Nilai default adalah 60. Atur batas waktu yang sesuai berdasarkan perintah yang akan dieksekusi.
              )
              response = client.run_command(request)
              return response.body.invoke_id
          except Exception as e:
              logger.error("run command failed", exc_info=True)
      
      
      def reboot_instances(instance_ids, Force=False):
          """
          instance_ids: Daftar ID instans yang akan dimulai ulang.
          Force: Menentukan apakah akan memaksa memulai ulang instans. Default adalah False.
          """
          request = RebootInstancesRequest(
              region_id=region_id,
              instance_id=instance_ids,
              force_reboot=Force
          )
          response = client.reboot_instances(request)
      
      
      def wait_invoke_finished_get_out(invoke_id, wait_count, wait_interval):
          for i in range(wait_count):
              result = get_invoke_result(invoke_id)
              if set([res['status'] for _, res in result.items()]) & set(["Running", "Pending", "Stopping"]):
                  time.sleep(wait_interval)
              else:
                  return result
          return result
      
      
      def wait_instance_reboot_ready(ins_ids, wait_count, wait_interval):
          for i in range(wait_count):
              result = get_instances_status(ins_ids)
              if set([res['status'] for _, res in result.items()]) != set(["Running"]):
                  time.sleep(wait_interval)
              else:
                  return result
          return result
      
      
      def run_task():
          # Atur jenis perintah Cloud Assistant.
          cmdtype = "RunShellScript"
          # Atur konten perintah Cloud Assistant.
          cmdcontent = """
          #!/bin/bash
          echo helloworld
          """
          # Atur batas waktu.
          timeout = 60
          # Masukkan ID instans tempat perintah akan dijalankan lalu dimulai ulang.
          ins_ids = ["i-bp185fcs****", "i-bp14wwh****", "i-bp13jbr****"]
      
          # Eksekusi perintah.
          invoke_id = run_command(cmdtype, cmdcontent, ins_ids, timeout)
          logger.info("run command,invoke-id:%s" % invoke_id)
      
          if invoke_id is None:
              logger.error("Failed to run command, stopping further execution")
              return
      
          # Tunggu hingga perintah selesai. Sistem mengecek status 10 kali dengan interval 5 detik. Sesuaikan jumlah pengecekan dan interval sesuai kebutuhan.
          invoke_result = wait_invoke_finished_get_out(invoke_id, 10, 5)
          for ins_id, res in invoke_result.items():
              logger.info(
                  "instance %s command execute finished,status: %s,output:%s" % (ins_id, res['status'], res['output']))
      
          # Mulai ulang instans.
          logger.warning("reboot instance Now")
          reboot_instances(ins_ids)
      
          time.sleep(5)
          # Tunggu hingga instans dimulai ulang dan masuk ke status Running. Sistem mengecek status 30 kali dengan interval 10 detik.
          reboot_result = wait_instance_reboot_ready(ins_ids, 30, 10)
          logger.warning("reboot instance Finished")
          for ins_id, res in reboot_result.items():
              logger.info("instance %s status: %s" % (ins_id, res['status']))
      
      
      if __name__ == '__main__':
          run_task()
      

      Ganti nilai-nilai berikut dalam kode contoh dengan nilai milik Anda:

      • ID AccessKey:

        access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']

      • Rahasia AccessKey:

        access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']

      • ID Wilayah:

        region_id = '<yourRegionId>'

      • ID Instans:

        ins_ids= ["i-bp185fcs****","i-bp14wwh****","i-bp13jbr****"]

    3. Jalankan file .py.

      Gambar berikut menunjukkan hasilnya: perintah dijalankan pada tiga instans untuk menghasilkan output helloworld, lalu instans dimulai ulang secara otomatis.openapi-exec-reboot

Mulai ulang instans secara batch dengan OOS

CloudOps Orchestration Service (OOS) mengotomatiskan tugas O&M melalui templat. Definisikan aksi Anda dalam templat dan eksekusi untuk menjalankan perintah serta memulai ulang instans secara batch.

  1. Buka halaman konfigurasi templat.

    1. Masuk ke Konsol OOS.

    2. Klik Create Template.

    3. Klik Create Template.

  2. Lengkapi konfigurasi templat.

    1. Pada halaman Create Template, pertahankan pengaturan default dan klik Next.

    2. Klik tab YAML dan masukkan kode berikut.

      Klik untuk melihat kode contoh

      FormatVersion: OOS-2019-06-01
      Description:
        en: Run a Cloud Assistant command on multiple ECS instances in a batch and then restart them.
        name-en: Batch Run Command and Restart ECS Instances
        categories:
          - run_command
      Parameters:
        regionId:
          Type: String
          Description:
            en: The ID of the region.
          Label:
            en: Region
          AssociationProperty: RegionId
          Default: '{{ ACS::RegionId }}'
        targets:
          Type: Json
          Label:
            en: Target Instances   
          AssociationProperty: Targets
          AssociationPropertyMetadata:
            ResourceType: ALIYUN::ECS::Instance
            RegionId: regionId
        commandType:
          Description:
            en: The type of the command.
            
          Label:
            en: Command Type
            
          Type: String
          AllowedValues:
            - RunBatScript
            - RunPowerShellScript
            - RunShellScript
          Default: RunShellScript
        commandContent:
          Description:
            en: The command content to execute on the ECS instance.
            
          Label:
            en: Command Content
            
          Type: String
          MaxLength: 16384
          AssociationProperty: Code
          Default: echo hello
        workingDir:
          Description:
            en: 'The directory where the command runs on the ECS instances. For Linux instances, the default is the home directory of the root user (/root). For Windows instances, the default is the directory where the Cloud Assistant client process is located, such as C:\Windows\System32.'
          Label:
            en: Working Directory
            
          Type: String
          Default: ''
        timeout:
          Description:
            en: The timeout period for command execution on an ECS instance.  
          Label:
            en: Timeout
          Type: Number
          Default: 600
        enableParameter:
          Description:
            en: Specifies whether the command contains secret or custom parameters.
          Label:
            en: Enable Parameters
          Type: Boolean
          Default: false
        username:
          Description:
            en: The username used to run the command on the ECS instance.
          Label:
            en: Username
          Type: String
          Default: ''
        windowsPasswordName:
          Description:
            en: The name of the password for the user who runs the command on a Windows instance.
          Label:
            en: Windows Password Name
          Type: String
          Default: ''
          AssociationProperty: SecretParameterName
        rateControl:
          Description:
            en: The concurrency ratio for task execution.
          Label:
            en: Rate Control
          Type: Json
          AssociationProperty: RateControl
          Default:
            Mode: Concurrency
            MaxErrors: 0
            Concurrency: 10
        OOSAssumeRole:
          Description:
            en: The RAM role that OOS assumes.
          Label:
            en: OOS Assume Role 
          Type: String
          Default: OOSServiceRole
      RamRole: '{{ OOSAssumeRole }}'
      Tasks:
        - Name: getInstance
          Description:
            en: Get the ECS instances.
          Action: ACS::SelectTargets
          Properties:
            ResourceType: ALIYUN::ECS::Instance
            RegionId: '{{ regionId }}'
            Filters:
              - '{{ targets }}'
          Outputs:
            instanceIds:
              Type: List
              ValueSelector: Instances.Instance[].InstanceId
        - Name: runCommand
          Action: ACS::ECS::RunCommand
          Description:
            en: Execute the Cloud Assistant command.
          Properties:
            regionId: '{{ regionId }}'
            commandContent: '{{ commandContent }}'
            instanceId: '{{ ACS::TaskLoopItem }}'
            commandType: '{{ commandType }}'
            workingDir: '{{ workingDir }}'
            timeout: '{{ timeout }}'
            enableParameter: '{{ enableParameter }}'
            username: '{{ username }}'
            windowsPasswordName: '{{ windowsPasswordName }}'
          Loop:
            RateControl: '{{ rateControl }}'
            Items: '{{ getInstance.instanceIds }}'
            Outputs:
              commandOutputs:
                AggregateType: Fn::ListJoin
                AggregateField: commandOutput
          Outputs:
            commandOutput:
              Type: String
              ValueSelector: invocationOutput
        - Name: rebootInstance
          Action: ACS::ECS::RebootInstance
          Description:
            en: Restart the ECS instances.
          Properties:
            regionId: '{{ regionId }}'
            instanceId: '{{ ACS::TaskLoopItem }}'
          Loop:
            RateControl: '{{ rateControl }}'
            Items: '{{ getInstance.instanceIds }}'
      Outputs:
        instanceIds:
          Type: List
          Value: '{{ getInstance.instanceIds }}'
    3. Klik Create Template.

    4. Pada kotak dialog yang muncul, masukkan nama templat runcommand_reboot_instances dan klik OK.

  3. Eksekusi templat.

    1. Temukan templat yang baru saja Anda buat dan klik Create an execution pada kolom Actions.

    2. Lengkapi konfigurasi eksekusi.

      Pilih beberapa instans pada halaman Parameter Settings dan pertahankan nilai default untuk pengaturan lainnya.exec-temp

    3. Pada halaman OK, klik Create.

      Templat dieksekusi secara otomatis. Pada halaman Basic Information, tunggu hingga Execution Status berubah menjadi Successful.

  4. Lihat proses eksekusi dan detail node tugas.

    1. Pada Execution Steps And Results, klik View Execution Flowchart untuk melihat proses eksekusi.

      image

    2. Klik langkah eksekusi perintah Cloud Assistant. Pada tab daftar tugas loop, lihat detail eksekusi setiap node tugas.

      image