我有一本简单的Ansible Playbook,该剧本将在远程服务器上调用Shell脚本,Shell脚本将调用另一个Python脚本,当我运行Ansible Playbook时脚本不起作用,但是当我向服务器ssh并手动运行相同的命令时,它会起作用。我已经进行了一些调试,似乎在调用Python脚本时,如果我从python脚本中删除所有导入语句,则可以从Ansible起作用,但是我不明白为什么当我向服务器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 Playbook简直就是:
---
- hosts: servers
tasks:
- name: trigger the script
shell: /start.sh
start.sh然后简单地调用python脚本:
#!/bin/sh
/start.py
对不起,这是我的不好
#!/bin/sh
/start & >> stdout.log
这引起了问题,我想进口的前三个模块与标准IO相关,因此解决方案是使用NOHUP。
再次,对不完整的问题感到非常抱歉。