【问题标题】:Can't run chef-solo command through ssh无法通过 ssh 运行 chef-solo 命令
【发布时间】:2014-03-08 10:55:10
【问题描述】:

在我先ssh到服务器然后运行命令的情况下,它执行成功

root@chef:~# chef-solo -v
Chef: 11.10.0

但是当我尝试像这样运行它时

 ssh root@188.xxx.xxx.xxx -t -C "chef-solo -c /var/chef/solo.rb"

我收到一个错误:

bash: chef-solo: command not found

为什么会发生这种情况,我该如何解决这个问题?

【问题讨论】:

  • 您的任何食谱是否管理$PATHchef-solo 很可能在您的路径中,但现在不在。
  • 是的。像这样在solo.rb cookbook_path File.expand_path("../cookbooks", __FILE__) json_attribs File.expand_path("../node.json", __FILE__)
  • 我不是这个意思。在目标系统上 - 是否有任何管理 bash.rc 或 /etc/profile 的说明书?
  • 不,他们不是。事实上,我可以通过 VPS 控制台运行它们。

标签: ruby ssh chef-infra chef-solo


【解决方案1】:

这仍然是 $PATH 和 ssh - 不是 chef-solo 的问题。对于$PATH 变量,交互式会话和非交互式会话不一定具有相同的值。 here on * 描述了相同的 ssh 问题。您还可以查看GNU bash manual 以更深入地了解(非)交互式和(非)登录 shell。简而言之,解决方案将是以下之一:

  1. 使用绝对路径运行 chef-solo。以下是您的命令可能的样子:
    • ssh root@188.xxx.xxx.xxx -t -C "/usr/local/ruby/bin/chef-solo -c /var/chef/solo.rb"李>
  2. 调整 .bash 配置文件,为交互式和非交互式 shell 加载相同的 $PATH 变量。

注意:要找出绝对路径是什么,通过ssh登录机器并运行which chef-solo(不知道你对linux的经验如何。对不起,如果我低估了你知识)

【讨论】:

  • 你是对的。在这里我找到了更详细的答案askubuntu.com/questions/121073/…。在我的特殊情况下,我需要从~/.bashrc# If not running interactively, don't do anything [ -z "$PS1" ] && return中删除这一行@