shell脚本如何执行指定函数(ansbile任务脚本及ansbile_script模块脚本合成)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

shell脚本如何执⾏指定函数(ansbile任务脚本及ansbile_script
模块脚本合成)
由于⼯作中经常需要使⽤ansible去批量执⾏脚本,再对ansible返回的结果进⾏过滤统计⼊库,为了实现⾃动化采集,设置定时任务执⾏ansible采集及过滤脚本
举例说明:
#定时任务脚本内容
#!/bin/bash
#调⽤ansible script模块执⾏本地脚本,获取所有被管理主机的磁盘信息
ansible all -m script -a "采集脚本路径" -b > 临时⽂件
#根据成功返回内容过滤出有效信息
for info in $(awk'过滤规则'临时⽂件)
do
#将成功信息insert⼊数据库
done
#根据错误返回内容过滤出有效信息
for err_info in $(awk'过滤规则'临时⽂件)
do
#将错误信息insert⼊数据库
done
#采集脚本内容
#!/bin/bash
#采集内容略
采集逻辑是,通过执⾏定时任务脚本,调⽤ansbile管理机上的采集脚本,获取所有被管理机器的数据信息。

此脚本的缺陷是,移植性极差,并且强依赖采集脚本(若采集脚本丢失,则导致定时任务执⾏失败),随着脚本增加会导致脚本管理不⽅便,因此考虑将两个脚本合成⼀个脚本,做到⼀个脚本实现全功能。

合成脚本的实现想法:
根据传⼊的参数决定执⾏的函数,样例:
#!/bin/bash
#数据采集函数
function info_collect() {
#采集内容
}
#定时任务函数
function cron_script() {
ansible all -m script -a "$0 info_collect" -b
}
#主函数,传⼊$1变量,根据变量内容决定执⾏的函数
function main() {
case $1 in
"info_collect")
info_collect
;;
"cron_script")
cron_script
;;
*)
echo "error"
exit 1
;;
esac
}
func_select=${1:-cron_script} #脚本默认执⾏cron_script这个函数
main $func_select
脚本逻辑:脚本执⾏时根据位置变量$1(若没有传⼊参数,则默认值为cron_script)选择执⾏对应的函数,此函数使⽤ansible的script模块调⽤同个脚本⾃⾝,根据传⼊新位置变量info_collect调⽤数据采集函数执⾏相关操作。

⾄此,实现脚本⼆合⼀。

相关文档
最新文档