概述
多活容灾服务支持使用 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" http://${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
最终执行结果和脚本输出可在脚本详情页中查看。