使用ansible时为什么Python脚本的工作方式不同?

时间:2017-02-15 06:51:12

标签: python ansible

我有一个简单的ansible playbook,它将在远程服务器上调用shell脚本,shell脚本将调用另一个python脚本,这将执行某些操作,当我运行ansible playbook时,脚本无法运行,但是当我ssh到服务器并手动运行相同的命令,它工作。我已经完成了一些调试,似乎在调用python脚本时,如果我从python脚本中删除所有import语句,它可以起作用,但是我不知道为什么当我ssh到服务器时它可以正常工作并希望就如何解决这个问题提出一些建议。

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    

1 个答案:

答案 0 :(得分:0)

抱歉,这是我的不好,我没有把所有的脚本放在这里,似乎还有另一个脚本,有像

这样的东西
#!/bin/sh
/start & >> stdout.log

这导致了问题,我猜导入的前三个模块都有与标准io相关的东西,所以解决方案是使用nohup。

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