2017-02-15 72 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。

再次,非常抱歉的不完整的问题。

相关问题