我有一个简单的 ansible 剧本,它将调用远程服务器上的 shell 脚本,shell 脚本将调用另一个 python 脚本,它会做一些事情,当我运行 ansible 剧本时,脚本不工作,但是当我ssh 到服务器并手动运行相同的命令,它起作用了。我已经做了一些调试,似乎在调用 python 脚本时,如果我从 python 脚本中删除所有 import 语句,它可以从 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()
那些import在这里没有用到,会在我的真实脚本中用到,这里我只是在文件中写一行用于调试。
ansible 剧本就像:
---
- hosts: servers
tasks:
- name: trigger the script
shell: /start.sh
start.sh 然后简单地调用 python 脚本:
#!/bin/sh
/start.py
最佳答案
对不起,是我的错,我没有把所有的脚本都放在这里,似乎还有另一个脚本有类似的东西
#!/bin/sh
/start & >> stdout.log
这导致了问题,我猜导入的前三个模块与标准 io 相关,所以解决方案是使用 nohup。
再次,对于不完整的问题非常抱歉。
关于python - 为什么使用 ansible 时 Python 脚本的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242458/