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调用数据采集函数执行相关操作。
至此,实现脚本二合一。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了