之前安裝了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
奇跡出現了,腳本正常運行,完美~~