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
什麼是'sh' /'python'腳本的最小設置?你的腳本沒問題,但可能會遇到'permission'錯誤。如果用戶不是「sudoers」或目錄是「只讀」,則不能用python寫'root_dir'。嘗試在'/ tmp'下打開文件,你會看到所有的都會工作。另一點是'chmod a + x start.py'比'。/ start.py'直接工作。 – dsgdfg
您很可能在僅爲交互式登錄shell提供的rc文件中設置了「PYTHONPATH」。將該值添加到'shell'任務並檢查。 – techraf
@dsgdfg,我不認爲這是關於腳本的權限,正如我所說的,當我從python腳本中刪除所有導入語句時,它甚至可以從可信的腳本中運行,所以我認爲權限是可以的。 – Jakim