2017-02-15 46 views
3

我有一個簡單易行的劇本,它將調用遠程服務器上的shell腳本,shell腳本將調用另一個python腳本,這將執行某些操作,當我運行劇本的劇本時,腳本無法正常工作,但當我ssh到服務器並手動運行相同的命令,它工作。我做了一些調試,似乎調用python腳本時,如果我從python腳本中刪除所有導入語句,它的工作原理是可行的,但我不明白爲什麼它在我ssh到服務器時起作用,並且希望對如何解決這個問題有一些建議。爲什麼Python腳本在使用ansible時工作不同?

的python腳本:

#!/usr/bin/python 
import socket 
import argparse 
import logging 
import subprocess 
import time 
import imp 

def main(): 
    f = open('/afile', 'w') 
    f.write('a test line') 
    f.close() 
if __name__ == '__main__': 
    main() 

這些進口不使用此,它會在我的真實腳本中使用,在這裏我只寫一行到用於調試的文件。

的ansible劇本只是簡單地想:

--- 
- hosts: servers 

tasks: 
    - name: trigger the script 
    shell: /start.sh 

的start.sh然後簡單地調用python腳本:

#!/bin/sh 
/start.py  
+0

什麼是'sh' /'python'腳本的最小設置?你的腳本沒問題,但可能會遇到'permission'錯誤。如果用戶不是「sudoers」或目錄是「只讀」,則不能用python寫'root_dir'。嘗試在'/ tmp'下打開文件,你會看到所有的都會工作。另一點是'chmod a + x start.py'比'。/ start.py'直接工作。 – dsgdfg

+0

您很可能在僅爲交互式登錄shell提供的rc文件中設置了「PYTHONPATH」。將該值添加到'shell'任務並檢查。 – techraf

+0

@dsgdfg,我不認爲這是關於腳本的權限,正如我所說的,當我從python腳本中刪除所有導入語句時,它甚至可以從可信的腳本中運行,所以我認爲權限是可以的。 – Jakim

回答

0

對不起,這是我的不好,我並沒有把所有的這裏的腳本好像還有另外一個腳本里面有這樣的東西

#!/bin/sh 
/start & >> stdout.log 

這個引起了這個問題,我想前三個模塊導入的東西與標準io相關,所以解決方案使用nohup。

再次,非常抱歉的不完整的問題。