全部產品
Search
文件中心

Elastic Compute Service:通過指令碼解譯器執行雲助手命令

更新時間:Feb 25, 2025

調用雲助手API介面(RunCommand/InvokeCommand)可以執行Shell、PowerShell或者Bat類型的指令碼。若需要執行其他指定指令碼解譯器(例如pythonkubectl等)的指令碼,您可以通過指定CommandContent和Launcher來實現。

前提條件

  • 執行個體的狀態必須為運行中(Running)。

  • 執行個體已安裝雲助手Agent,且雲助手Agent版本需要高於以下對應的版本。

    • Linux:2.2.3.668

    • Windows:2.1.3.668

使用限制

  • 僅支援執行個體內已經安裝的指令碼解譯器。

  • 不支援需要輸入互動的指令碼解譯器。

使用方式

調用RunCommandInvokeCommand執行雲助手命令時,指定CommandContentLauncher參數。

CommandContent參數

CommandContent指準備執行的指令碼內容。例如,當使用者想要通過雲助手執行一段Python指令碼時,CommandContent參數需要填寫Python指令碼的具體內容。

Launcher參數

Launcher支援傳遞參數到指令碼解譯器,同時支援在指令碼解譯器後通過{{ACS::ScriptFileName}}標識符控制指令檔路徑在實際指令碼執行命令中的位置。

指定指令碼解譯器

Launcher參數指定指令碼解譯器時,根據是否配置指令碼解譯器的絕對路徑在PATH環境變數中,分為以下兩種使用方式:

  • 未配置環境變數:您需要在Launcher參數中輸入指定指令碼解譯器的絕對路徑。例如,Python指令碼解譯器路徑未配置在PATH環境變數中,Launcher參數設定如下:

    /usr/bin/python
  • 已配置環境變數:您可以在Launcher參數中輸入指定指令碼解譯器名。例如,Python指令碼解譯器的路徑已經配置在PATH環境變數中,則可以直接在Launcher參數中指定為python:

    python

通過標識符指定指令檔在命令中的位置

  • 未指定標識符

    雲助手會在命令末尾添加實際執行的指令檔路徑。例如,Launcherpython,雲助手實際在執行個體內部執行了python <file>,其中 <file>表示指令碼內容CommandContent的實際寫入檔案路徑。

  • 通過標識符指定指令檔在命令中的位置

    針對某些要求指令檔路徑在命令中特定位置的指令碼解譯器(例如,python解譯器要求需要執行的指令檔路徑作為第一個參數),您可以在Launcher參數中,通過{{ACS::ScriptFileName}}標識符指定指令檔在命令中的位置。例如

    python {{ACS::ScriptFileName}} arg1 arg2

    此時,雲助手實際在執行個體內部執行了 python <file> arg1 arg2,其中 <file>表示指令碼內容CommandContent的實際寫入檔案路徑。

  • 通過標識符指定指令檔尾碼名

    針對某些嚴格要求尾碼名的指令碼解譯器,您可以通過{{ACS::ScriptFileName|Ext(.ext)}}標識符指定指令檔名的尾碼名,例如

    python3 {{ACS::ScriptFileName|Ext(.py)}}

    此時,雲助手會將Launcher參數中的{{ACS::ScriptFileName|Ext(.py)}}替換為尾碼名為.py的指令檔路徑。雲助手實際在執行個體內部執行了python3 <file>.py ;其中 <file>表示指令碼內容CommandContent的實際寫入檔案路徑。

使用情境樣本

調用系統內的Python程式執行指令碼內容

CommandContent

import datetime
current_date = datetime.date.today()
print(current_date)

Launcher

python {{ACS::ScriptFileName|Ext(.py)}}

調用系統內的kubectl程式執行指令碼內容

CommandContent

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80

Launcher

kubectl apply -f {{ACS::ScriptFileName|Ext(.yaml)}}

調用regedit執行註冊表指令檔

CommandContent

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micorsoft\Windows\Persionalization]
"NoLockScreen"=dword:000000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"WaittoKillServiceTimeout"="2000"

Launcher

regedit import {{ACS::ScriptFileName|Ext(.reg)}}

低版本雲助手如何使用指令碼解譯器

雲助手Agent版本低於前提條件中的版本要求時,您可以通過Heredoc機制(僅支援Linux系統)指定指令碼解譯器,HereDoc機制允許使用者在命令列中輸入多行文本。

python3 <<EOF
# 這是一個簡單的 Python 指令碼
import datetime
current_date = datetime.date.today()
print(current_date)
EOF