【问题标题】:CHEF / knife - running shell scriptCHEF /刀 - 运行shell脚本
【发布时间】:2017-04-23 02:43:20
【问题描述】:

我正在使用脚本从用户那里收集构建规范信息,然后使用刀克隆并构建 VM 以符合规范。 CHEF 然后将一些 shell 脚本复制到配置的节点,然后我使用“knife ssh”执行这些脚本。

这很好用:

template '/path/to/filename.sh' do
  source 'filename.sh.erb'
  mode 755
end

这不是:

cookbook_file '/path/to/filename.sh' do
  source 'filename.sh'
  mode 755
end

filename.sh.erb 和 filename.sh 的内容相同。我得到的错误信息如下:

DEMO-CCM2.t3fca.com bash: /tmp/C3_Component_Install.sh: /bin/bash^M: 错误的解释器:没有这样的文件或目录

两个文件的最顶部如下所示:

#!/bin/bash

如果我去主机并尝试手动运行脚本,以下所有工作都很好:

  • sh C3_Component_Install.sh
  • /bin/bash C3_Component_Install.sh
  • /usr/bin/bash C3_Component_Install.sh
  • /tmp/C3_Component_Install.sh

所以我不知道出了什么问题。提前感谢您的帮助。

【问题讨论】:

    标签: bash chef-infra knife


    【解决方案1】:

    您正在使用 Windows 换行符保存文件,在处理过程中修复模板时,会为您重新创建 cookbook_file。如果您使用 Unix 换行符保存,那将是相同的。

    【讨论】:

    • 我在 Windows 上使用 Atom,将文件保存到与 Vagrant 实例共享的目录中,这样我就可以从 Vagrant 实例 (CentOS 7) 中执行 Chef 代码。您是说如果不是通过 Atom 保存文件,而是将文本复制到剪贴板,然后将其粘贴到终端仿真器中的“nano”(文本编辑器)中到 Vagrant 实例中,这不会解决我的问题?除了在 Linux 中本地进行所有文本编辑之外,有没有办法解决我的问题?还是坚持使用模板方法的唯一解决方案?模板如何解决这个问题?谢谢。
    • Atom 默认包含 AFAIK 的 line-ending-selector 插件,截图见github.com/atom/line-ending-selector。让LF.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多