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

使用Fabric2执行远程SSH命令时遭遇Exit code 127错误

解决Fabric2执行yarn命令提示"bash: yarn: command not found"的问题

这问题我之前踩过坑!核心原因是Fabric 2默认使用非交互式非登录shell执行远程命令,而你直接通过SSH登录服务器时是交互式登录shell,两者加载的环境变量配置文件不一样,导致yarn的路径没被加入到$PATH环境变量中,所以找不到命令。

下面给你几个可行的解决办法:

  • 手动指定yarn的绝对路径
    先通过SSH登录服务器,执行which yarn找到yarn的绝对路径(比如/opt/hadoop/bin/yarn或者/usr/local/bin/yarn),然后在Fabric的命令里直接用这个路径执行:

    conn.run("/opt/hadoop/bin/yarn your-mapreduce-command")
    
  • 执行命令前先加载环境变量配置文件
    如果yarn的路径是在~/.bashrc、~/.bash_profile或者/etc/profile这类文件里配置的,可以在执行yarn命令前先source对应文件:

    # 比如加载用户的bashrc
    conn.run("source ~/.bashrc && yarn your-mapreduce-command")
    # 或者加载系统级的profile文件
    conn.run("source /etc/profile && yarn your-mapreduce-command")
    

    注意不同Linux发行版的环境变量配置文件可能不同,你可以先确认自己的yarn路径是在哪个文件里配置的。

  • 配置Fabric使用登录shell执行命令
    你可以在创建Fabric连接时,指定使用登录shell(-l参数),这样会自动加载登录时的环境变量配置:

    from fabric import Connection
    # 指定shell为bash登录shell
    conn = Connection("your-server-ip", shell="/bin/bash -l -c")
    conn.run("yarn your-mapreduce-command")
    

这几个方法都能解决环境变量不加载的问题,你可以根据自己的实际情况选一个最方便的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:21