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
什么是'sh' /'python'脚本的最小设置?你的脚本没问题,但可能会遇到'permission'错误。如果用户不是“sudoers”或目录是“只读”,则不能用python写'root_dir'。尝试在'/ tmp'下打开文件,你会看到所有的都会工作。另一点是'chmod a + x start.py'比'。/ start.py'直接工作。 – dsgdfg
您很可能在仅为交互式登录shell提供的rc文件中设置了“PYTHONPATH”。将该值添加到'shell'任务并检查。 – techraf
@dsgdfg,我不认为这是关于脚本的权限,正如我所说的,当我从python脚本中删除所有导入语句时,它甚至可以从可信的脚本中运行,所以我认为权限是可以的。 – Jakim