厨师被困在编辑/ etc / sudoers

时间:2014-08-21 02:14:03

标签: vagrant chef chef-solo

我尝试使用由chef-solo插件为Vagrant运行的vagrant-aws进行部署。 vagrant-aws成功启动EC2实例,唤醒厨师烹饪书,然后开始厨师运行。我主要使用通过librarian-chef gem下载的库存食谱。有一个特定于应用程序的菜谱可以配置应用程序的设置。 sudo食谱是v2.7.0。

问题在于,每当我尝试配置实例时,厨师都会被编辑/etc/sudoers。如果我进入实例,我发现主厨进程没有运行。它似乎在没有任何返回码的情况下退出,因为vagrant-aws永远不会完成运行。

以下是--debug的{​​{1}}输出:

vagrant up production --provider=aws

然后它只是一遍又一遍地重复最后一行。过了一会儿,==> production: [2014-08-21T02:02:46+00:00] INFO: template[/etc/sudoers] backed up to /var/chef/backup/etc/sudoers.chef-20140821020246.492236 DEBUG ssh: stdout: [2014-08-21T02:02:46+00:00] INFO: template[/etc/sudoers] updated file contents /etc/sudoers INFO interface: info: [2014-08-21T02:02:46+00:00] INFO: template[/etc/sudoers] updated file contents /etc/sudoers INFO interface: info: ==> production: [2014-08-21T02:02:46+00:00] INFO: template[/etc/sudoers] updated file contents /etc/sudoers ==> production: [2014-08-21T02:02:46+00:00] INFO: template[/etc/sudoers] updated file contents /etc/sudoers DEBUG ssh: Sending SSH keep-alive... 进程就会死掉但没有清理chef-solo。如果我在实例上再次手动运行/var/chef/cache/chef-client-running.pid,它会正常完成。

1 个答案:

答案 0 :(得分:0)

尝试禁用:

config.ssh.pty
来自Vagrantfile

选项。通常这是造成这种情况的常见原因。

config.ssh.pty的Vagrant文​​档中,我们可以读到:

  

此设置是一项高级功能,除非绝对必要,否则不应启用此功能。它打破了Vagrant的一些其他功能,并且实际上仅在绝对必要的情况下暴露。如果你能找到一种不使用pty的方法,那么建议使用。

因为我与apt-get有类似的问题。

对流浪汉进行故障排除

  • 在Unix / OS X上你可以按 Ctrl + T 来检查进程状态(为什么要处理)
  • 运行(如果需要,安装lldb):

    echo "call (void)rb_backtrace()" | lldb -p $(pgrep -fn ruby)
    

    在前台打印Ruby回溯(您也可以使用gdb

  • 执行日志记录,例如:vagrant --debug up 2> frozen.log和工作配置到works.log,然后与差异工具进行比较

  • 在Unix / OS X上运行:sudo dtruss -fn ruby(或vagrant),在Linux上使用strace / ltrace来调试过程
  • 请参阅:Check why ruby script hangs了解更多建议