我有一个简单的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
答案 0 :(得分:0)
#!/bin/sh
/start & >> stdout.log
这导致了问题,我猜导入的前三个模块都有与标准io相关的东西,所以解决方案是使用nohup。
再次,对于不完整的问题非常抱歉。