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

 

 

奇跡出現了,腳本正常運行,完美~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM