文档

通过脚本解释器执行云助手命令

更新时间:

调用云助手API接口(RunCommand/InvokeCommand)可以执行Shell、PowerShell或者Bat类型的脚本。若需要执行其他指定脚本解释器(例如python,kubectl等)的脚本,您可以通过指定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