crontab中运行ansible命令
之前安装了ansible,只是想用ansible进行基本的点检,比如通过ansible执行uptime查看托管节点,然后把输入到ansible主机的文本文件中。手动执行是OK的,但放到crontab中就不行,错误输出如下:
Trackback (most recent call last):
File “/root/ansible/bin/ansible”,line 40,in <module>
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
ImportError: No module named ansible.errors
根据这报错,我总是感觉是ansible缺少显示这个错误的模块。
很是奇怪,我想手动执行可以正常应该就没问题了,放到crontab里就出错,我CAO,难道ansible不支持,必须写playbook?太TMD吓人了,我是个思维简单的人,你让我去写playbook,我直接放弃了。去百度搜ansible crontab关键字,都是关于ansible的crontab模块的,这个我知道呀,不是我要的结果。
后来就想变通的方法,在ansible主机上创建托管节点上的crontab,然后把结果输出到托管节点的文本中,然后用fetch命令取回到ansible主机。但是取回来格式太长,比如托管节点输出的文本路径/tmp/20181026.txt,假设托管节点的IP为10.10.10.10,fetch到ansible的/tmp下,就会是/tmp/10.10.10.10/tmp/20181026.txt,托管节点少还好说,托管节点多查看也麻烦。再者定时去fetch,同样要用到crontab,绕了一大圈死路一条啊。当然让我熟悉了下copy和fetch的区别。
正好有红帽的账号(领导提醒,让我问问红帽),红帽给的思路就是,在crontab中执行date命令看能不能成功,这个当然是成功的。让我搜sosreport,结果不能搜,报错
Trackback (most recent call last):
File “/usr/sbin/sosreport”, line 20,in <module>
from sos.sosreport import main
ImportError: No module named sos.sosreport
竟然这么雷同
红帽给的回复大概是以下几个原因:
1.PATH变量设置的不对
2.Python存在多个版本,Python版本不是系统自带的
3.ansible不是正常安装的(忘记怎么说了)
4.忘记了
除了第一条,其他几条我的环境都满足
我装ansible时,安装了python 2.7.8,系统自带的2.6
ansible我是通过git clone从github上装的
后来我再问红帽怎么继续排查时,红帽就说是python的问题,ansible没有订阅。大概就是哥只能帮你到这了,此case我关闭了。
只好自己捉急了
反正就是ansible python crontab module关键字,搜呗,这样会搜到不少相关的。至少比我一开始搜crontab ansible module有用,这个搜的都是ansible的crontab模块
大概就是crontab调用系统自带的python
而我的ansible用其他版本的python
我就把要放到crontab里的ansible脚本中加入了export PYTHONPATH=/root/ansible/lib
奇迹出现了,脚本正常运行,完美~~