當需要對執行個體執行重複性營運任務時,例如安裝軟體、更新配置、採集日誌等,手動登入每台執行個體操作效率低下、容易出錯。雲助手支援通過指令碼(如 Shell、PowerShell)在多台目標執行個體上安全、可靠地執行任務。
操作步驟
控制台
訪問ECS控制台-雲助手。
在頁面左側頂部,選擇目標資源所在的資源群組和地區。
在ECS 雲助手頁面右上方,單擊建立/執行命令。
在命令資訊地區,完成以下配置:
命令內容:可開啟使用參數。
命令內容在Base64編碼後,選擇執行並儲存命令時不能超過18 KB,選擇執行時不能超過24 KB。
自訂參數:使用
{{parameter}}格式定義參數,手動賦值,能滿足動態取值以及一值多用的情境。內建參數:雲助手提供了一些內建參數,無需手動賦值,可在執行時自動替換,例如
{{ACS::RegionId}}(地區 ID)、{{ACS::InstanceId}}(執行個體 ID)等。
#!/bin/bash # 樣本 # {{name}}是自訂參數,需要在命令內容編寫完成後進行手動賦值 echo {{name}} # {{ACS::RegionId}}是內建參數,無需手動賦值 echo {{ACS::RegionId}}執行計畫:
僅預檢:只預檢此次請求,命令內容不會實際生效,檢查項包括請求參數、執行個體執行環境、雲助手Agent運行狀態等。
定時執行:
固定時間間隔執行:基於Rate運算式,僅適用於固定的時間間隔。
設定的時間間隔不大於7天、不小於60秒,且需大於定時任務的逾時時間。
基於時鐘定時執行:基於Cron運算式,配置靈活,適用於較複雜的定時任務執行情境。
執行使用者:預設為
root(Linux) 或System(Windows)。建議遵循最小許可權原則,使用普通使用者執行。執行路徑:指令碼在執行個體內的執行目錄。Linux 預設在
/root目錄下,Windows 預設在C:\Windows\system32目錄下。為確保指令碼在預期路徑下執行,建議在指令碼開頭使用cd命令切換目錄。逾時時間:預設為 60 秒。可設定逾時範圍為10~86400秒(24小時)。
任務終止模式:
指令碼進程:停止任務時會終止指令碼進程。
進程樹:停止任務時會終止進程樹(指令碼進程以及它建立的所有子進程的集合)。
在選擇執行個體或者選擇受管理的執行個體地區,選中需要執行命令的目標執行個體。
可選擇多台執行個體,最多支援100台。
單擊執行並儲存或執行,開始執行任務。
CLI
準備命令內容
RunCommand介面支援將CommandContent參數值設定為明文內容或 Base 64 編碼後的內容。Base 64 編碼後的內容,則必須設定ContentEncoding參數為Base64。使用以下命令對指令碼內容進行Base64編碼:Linux / macOS
# 編碼字串 "hello world" # 使用 -n 來避免末尾的分行符號被編碼 echo -n "hello world" | base64 # 輸出: aGVsbG8gd29ybGQ=Windows (PowerShell)
# 編碼字串 "hello world" [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("hello world")) # 輸出: aGVsbG8gd29ybGQ=執行命令
使用
aliyun ecs RunCommand命令執行。參數說明,請參見RunCommand。樣本 1:在單台執行個體上立即執行命令
# 將 "yum -y update" Base64編碼後為 "eXVtIC15IHVwZGF0ZQ==" aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \樣本 2:在多台執行個體上批量執行命令
# 重複使用 --InstanceId.N 參數指定多個執行個體 aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --InstanceId.1 'i-bp1************de01' \ --InstanceId.2 'i-bp1************de02' \ --InstanceId.3 'i-bp1************de03'樣本 3:建立 Cron 定時任務
# Frequency 參數使用 Cron 運算式和時區 # 樣本:在上海時區,2024 年每天中午 12:00 執行 aliyun ecs RunCommand --RegionId 'cn-hangzhou' \ --Type 'RunShellScript' \ --ContentEncoding 'Base64' \ --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \ --RepeatMode 'Period' \ --Frequency '0 0 12 * * ? 2024 Asia/Shanghai' \ --InstanceId.1 'i-bp1************de01'
查詢執行結果
RunCommand會返回InvokeId,使用aliyun ecs DescribeInvocationResults命令和InvokeId查詢詳細結果。參數說明,請參見DescribeInvocationResults。# 將 t-hz018qlm86d**** 替換為您的 InvokeId aliyun ecs DescribeInvocationResults --RegionId 'cn-hangzhou' --InvokeId '<invoke_id>'返回結果中的
Output欄位即為指令碼的標準輸出(STDOUT),ErrorInfo或ErrorMsg欄位則包含錯誤資訊。
配額與限制
生產應用建議
常見問題
Q:如何檢查 ECS 執行個體上的雲助手 Agent 版本?
A:支援通過控制台或者登入執行個體內部查看雲助手版本。具體步驟,請參見安裝雲助手Agent。
Q:建立了一個固定時間間隔執行的定時任務,它是會立即執行一次,還是會等待10分鐘後才首次執行?
A:任務不會在建立後立即執行,將在設定的時間間隔過後首次執行,並且執行間隔只基於固定頻率,與任務實際執行需要的時間無關。如果您在上午10:00建立了一個每10分鐘執行一次的任務,那麼它的首次執行時間將會是上午10:10,第二次執行時間是10:20,以此類推。
Q:命令執行失敗,如何排查?
A:1. 在控制台的執行結果頁面查看詳細的Output日誌,分析指令碼的報錯資訊。
2. 檢查命令執行使用者是否對相關檔案或目錄有讀寫執行許可權。
3. 確認指令碼文法是否正確,是否能在執行個體上本地手動執行成功。
4. 檢查執行個體狀態是否為運行中,網路是否正常。
5. 如果返回ClientNeedUpgrade錯誤,請先檢查並升級雲助手Agent。
更多資訊,請參見查看執行結果及修複常見問題。