[ansible]wget批量调用shell脚本
前言
相较于使用playbook,个人更习惯于编写shell脚本。如果需要多台服务器执行某一任务,可以将脚本放在某个http服务目录下,比如nginx,然后通过ansible的shell模块让服务器通过wget执行远程脚本。
本文以 ansible + nginx + shell脚本为例。
IP | 服务 | 说明 |
---|---|---|
192.168.0.20 | nginx | 提供http服务 |
192.168.0.20 | ansible | ansible控制节点 |
192.168.0.21 | 目标主机 |
nginx配置
nginx的配置比较简单,大致如下,根据自身所需修改配置。
server {
listen 80;
server_name 192.168.0.20;
charset utf-8;
location /res {
alias /home/res;
autoindex on;
autoindex_format html;
autoindex_exact_size off;
autoindex_localtime on;
}
}
shell脚本
在/home/res
目录下随便写个shell脚本。为了避免有些服务器的bash路径不是/bin/bash
,这里通过环境变量引用bash解释器。
#!/usr/bin/env bash
df -h
- 测试
# q后面是大写字母O, 不是数字0
sh -c "$(wget http://192.168.0.20/res/test.sh -qO -)"
正常情况下会输出当前服务器的分区存储情况。
ansible调用
ansible all -m shell -a 'sh -c "$(wget http://192.168.0.20/res/test.sh -qO -)"'
其它
- 如果没有nginx,也可以用python的标准库临时创建一个http服务,毕竟绝大部分linux发行版都内置python。比如:
# 在脚本文件所在目录创建http服务, 指定12345端口
# 如果使用python 2, 命令为 python -m SimpleHTTPServer 12345
python3 -m http.server 12345
ansible all -m shell -a 'sh -c "$(wget http://192.168.0.20:12345/test.sh -qO -)"'
- 才发现ansible还有个执行脚本的script模块,主要作用就是把管理节点的脚本分发到被管理节点然后执行。具体帮助文档可见
ansible-doc script
。示例如下:
# /tmp/test.sh 是管理节点上的shell脚本
ansible all -m script -a '/tmp/test.sh'
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/16639956.html