私は、リモートサーバ上でシェルスクリプトを呼び出すシンプルな可能性のあるプレイブックを持っています。シェルスクリプトは、何かをする別の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
'sh' /' python'スクリプトの最小限の設定は何ですか?あなたのスクリプトは大丈夫ですが、 'permission'エラーが出るかもしれません。あなたが 'sudoers'でないかディレクトリが' read only'であれば 'root_dir'をpythonで書くことはできません。 '/ tmp'の下にファイルをオープンしてみてください。すべてが動作することがわかります。別の点は、 '。/ start.py'が直接動作するよりも' chmod a + x start.py'です。 – dsgdfg
ほとんどの場合、対話型のログインシェルに対してのみ提供されているrcファイルに 'PYTHONPATH'を設定しています。 'shell'タスクに値を加え、チェックします。 – techraf
@dsgdfg、私はそれはスクリプトの許可については、私は言ったように、私はPythonスクリプトからすべてのインポートステートメントを削除すると考えていない、それは無能からも動作するので、私は許可がOKだと思います。 – Jakim