2017-02-15 6 views
3

私は、リモートサーバ上でシェルスクリプトを呼び出すシンプルな可能性のあるプレイブックを持っています。シェルスクリプトは、何かをする別のpythonスクリプトを呼び出します。サーバーと同じコマンドを手動で実行すると、うまくいきました。私はいくつかのデバッグを行った、pythonスクリプトを呼び出すときに、私はPythonスクリプトからすべてのインポートステートメントを削除すると、それは有能なから動作しますが、なぜ私はサーバーにsshとしたいときに動作して理解していないこの問題を解決する方法についていくつかの提案があります。なぜPythonスクリプトは、使用しているときに異なった働きをしますか?

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'でないかディレクトリが' read only'であれば 'root_dir'をpythonで書くことはできません。 '/ tmp'の下にファイルをオープンしてみてください。すべてが動作することがわかります。別の点は、 '。/ start.py'が直接動作するよりも' chmod a + x start.py'です。 – dsgdfg

+0

ほとんどの場合、対話型のログインシェルに対してのみ提供されているrcファイルに 'PYTHONPATH'を設定しています。 'shell'タスクに値を加え、チェックします。 – techraf

+0

@dsgdfg、私はそれはスクリプトの許可については、私は言ったように、私はPythonスクリプトからすべてのインポートステートメントを削除すると考えていない、それは無能からも動作するので、私は許可がOKだと思います。 – Jakim

答えて

0

申し訳ありませんが、それは私の悪い、私はすべて入れていませんスクリプトは、

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

のようなものを持つ別のスクリプトがあるようですが、私はインポートされた最初の3つのモジュールが標準のioに関連するものを持っていると思うので、解決策はnohupを使用しています。

もう一度、不完全な質問は大変申し訳ありません。

関連する問題