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调用数据采集函数执行相关操作。

至此,实现脚本二合一。

 

posted @ 2021-02-25 16:41  zhangsi-lzq  阅读(580)  评论(0编辑  收藏  举报