You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ansible Playbook运行Python脚本并输出结果?

问题分析

你的Ansible任务卡在Run the script步骤,核心原因有两个:

  1. Ansible的command模块默认会阻塞等待命令执行完毕,而你的Python脚本是无限循环,永远不会主动退出,所以任务会一直挂起。
  2. 即使脚本正常运行,Ansible默认会缓存命令输出,直到命令结束才返回结果,因此你看不到实时的I'm alive输出。

另外,你的Playbook里还有一个语法错误:Check if script ran任务中引用了未定义的变量script_output,正确的变量名应该是你注册的script_result。

解决方案

根据你的需求,分两种场景处理:

场景1:让脚本后台运行(不阻塞Ansible任务)

如果只是需要脚本在后台持续运行,同时保留输出日志,修改Run the script任务为:

- name: Run the script in background
  shell: nohup {{ python_interpreter }} {{ python_script_dest }} > /opt/web_service/script_output.log 2>&1 &
  register: script_result
  become: true
  become_user: root

参数解释:

  • nohup:让脚本脱离当前终端会话,即使Ansible任务结束,脚本仍会继续运行
  • > /opt/web_service/script_output.log:把标准输出重定向到日志文件
  • 2>&1:把错误输出也重定向到同一个日志文件
  • &:让进程在后台运行,立即返回控制权给Ansible

之后可以添加任务查看最新的日志内容:

- name: Show latest script output
  command: tail -n 10 /opt/web_service/script_output.log
  register: recent_logs
- debug:
    var: recent_logs.stdout_lines

场景2:实时查看脚本输出(阻塞Ansible任务)

如果需要在Ansible执行过程中实时看到I'm alive的输出,可以保留command模块,但需要注意:

  • Ansible会一直阻塞直到你手动中断(Ctrl+C)
  • 需要使用较高的 verbosity 级别(比如-vvv)才能看到实时输出

同时修正变量名错误:

- name: Check if script ran
  debug:
    msg: "Script ran: {{ script_result.changed }}"
注意事项
  • 后台运行的脚本可以用ps aux | grep python_script.py查看进程状态
  • 如果需要停止脚本,使用pkill -f python_script.py命令
  • 避免在生产环境中直接运行无限循环的后台脚本,建议添加进程管理(比如systemd服务)来保证脚本异常退出后自动重启

内容的提问来源于stack exchange,提问作者Mahdi Kh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:55:55