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

image

根据这报错,我总是感觉是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

image

竟然这么雷同

红帽给的回复大概是以下几个原因:

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

奇迹出现了,脚本正常运行,完美~~

原文地址:https://www.cnblogs.com/cnmarkao/p/9859314.html