概述
多活容災服務支持使用 Shell 與 Python2 腳本語言。您可以在數據庫或非天翼云云主機上執行這些腳本。
腳本管理提供多種創建方式:
上傳本地腳本:直接上傳您已有的腳本文件。
手工錄入:在平臺提供的編輯器中直接編寫腳本內容。
克隆現有腳本:基于一個已有腳本快速復制并修改。
腳本功能強大,支持以下高級特性:
定義腳本參數:通過參數化提升腳本的靈活性。
使用系統環境變量:內置平臺提供的環境變量。
設計輸入與輸出:明確腳本的請求參數與返回結果。
設置成功標準:根據返回參數自定義腳本執行成功的判定條件。
使用介紹
一、腳本參數說明
通過定義腳本參數,可以極大增強腳本的靈活性和復用性。單個腳本可作為模板,通過為不同資源配置不同的參數值,輕松適配多種場景,無需重復編寫。
腳本參數包含兩種類型:
此類參數由多活容災平臺預定義,例如
HostIP、HostPort、HostUser、DBIP等(共12個)。腳本執行時,平臺會自動獲取指定資源的對應信息并注入環境變量,無需用戶手動設置。
說明
查看方法:目前支持HostIP、HostPort、HostUser、HostPwd、HostAuthKeyPath、HostOtherUser、HostOtherPwd、DBIP、DBPort、DBName、DBName、DBPwd。具體適用對象和備注等內容可通過左側菜單欄的“系統環境變量”查看。
用戶可根據腳本邏輯自定義所需的參數,每個參數需配置參數名、參數類型和參數Key。
參數名:僅為便于管理界面識別和填寫,不會在腳本執行過程中出現。
參數Key:腳本執行時實際使用的變量名。
用戶自定義參數分為兩種用途:
請求參數:作為腳本的輸入,在執行前由用戶配置具體值,用于初始化腳本中的變量。
返回參數:作為腳本的輸出結果,平臺將捕獲此參數的值,并用于判斷腳本執行是否達到用戶定義的成功標準。
二、系統變量參數在腳本中的使??法
系統變量參數由平臺預定義,無需在“腳本參數”中手動添加。在編寫腳本時,您可以直接通過 ${變量名} 的占位符格式引用它們。
Shell 示例:假設您需要在腳本中調用一個API,可以直接使用 ${HostIP} 和 ${HostPort} 來動態指定目標地址:
curl -X POST -d "param=value" //${HostIP}:${HostPort}/resource三、?戶?定義參數在腳本中的使??法
對于用戶自定義的參數,您必須先在頁面的“腳本參數”欄中完成定義,才能在腳本內容中通過 ${參數Key} 的格式進行調用。執行腳本時,系統會將占位符替換為您所配置的具體值。
請求參數 (輸入):
例如,定義一個鍵(Key)為restartHostCmd的字符串類型參數。在腳本中引用該參數后,執行時只需為其指定具體命令(如reboot)即可。/bin/bash -c "${restartHostCmd}"返回參數 (輸出):
返回參數用于判斷腳本執行結果是否成功。您需要在腳本中對該參數進行賦值,平臺會捕獲其最終值,并與您設定的成功條件進行比對。Shell 示例:假設定義了一個整型返回參數
retCode,可在腳本末尾對其賦值:echo "retCode=${retCode}"
此后,您即可將 retCode 是否等于 0 設定為該腳本的成功標準。
腳本編寫示例
一、功能描述
本示例腳本用于監控遠程主機上的指定守護進程狀態。若進程未運行,則啟動該進程;若進程正在運行,則將其重啟。
二、Shell 腳本內容
#!/bin/bash
# 檢查遠程主機上指定服務進程是否正在運行
status=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 ${HostUser}@${HostIP} "pgrep ${serviced} > /dev/null; echo \$?")
# 根據進程狀態執行相應操作
if [ "$status" -eq 0 ]; then
# 進程正在運行,執行重啟操作
retCode=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no ${HostUser}@${HostIP} "sudo systemctl restart ${serviced}; echo \$?")
else
# 進程未運行,執行啟動操作
retCode=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no ${HostUser}@${HostIP} "sudo systemctl start ${serviced}; echo \$?")
fi
if [ "$retCode" -eq 0 ]; then
echo "0"
else
echo "-1"
fi實現說明
遠程連接與命令執行:使用
sshpass工具通過密碼認證建立 SSH 連接,在遠程主機上執行相應命令進程狀態檢測:通過
pgrep ${serviced}命令檢查指定進程是否運行進程正在運行:返回狀態碼 0
進程未運行:返回狀態碼 1
服務管理:
當檢測到進程運行時,執行
systemctl restart命令重啟服務當檢測到進程未運行時,執行
systemctl start命令啟動服務
返回值處理:通過
${retCode}獲取命令執行結果,0 表示成功,非零值表示失敗
參數配置
在"腳本參數"中需要配置以下參數:
請求參數:
${serviced}:需要監控的守護進程名稱
返回參數:
${retCode}:用于捕獲腳本執行結果的狀態碼
成功標準設定
建議將成功標準設置為:retCode 等于 0
返回值為 0 表示服務操作成功
返回值為非零表示操作失敗,可根據具體返回值進行故障排查
三、腳本驗證
在??腳本管理>腳本庫列表??,選擇當前腳本的“驗證選項”,選擇?標資源,填?腳本請求參數,以nginx為例:
腳本執行時,會被替換成如下:
#!/bin/bash
HostPwd="password"
HostUser="secure"
HostIP="1.1.1.1"
serviced="nginx"
status=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 ${HostUser}@${HostIP} "pgrep ${serviced} > /dev/null; echo \$?")
if [ "$status" -eq 0 ]; then
retCode=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no ${HostUser}@${HostIP} "sudo systemctl restart ${serviced}; echo \$?")
else
retCode=$(sshpass -p ${HostPwd} ssh -o StrictHostKeyChecking=no ${HostUser}@${HostIP} "sudo systemctl start ${serviced}; echo \$?")
fi
if [ "$retCode" -eq 0 ]; then
echo "0"
else
echo "-1"
fi最終執行結果和腳本輸出可在腳本詳情頁中查看。