我尝试使用由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
,它会正常完成。
答案 0 :(得分:0)
尝试禁用:
config.ssh.pty
来自Vagrantfile
的选项。通常这是造成这种情况的常见原因。
在config.ssh.pty的Vagrant文档中,我们可以读到:
此设置是一项高级功能,除非绝对必要,否则不应启用此功能。它打破了Vagrant的一些其他功能,并且实际上仅在绝对必要的情况下暴露。如果你能找到一种不使用pty的方法,那么建议使用。
因为我与apt-get有类似的问题。
运行(如果需要,安装lldb
):
echo "call (void)rb_backtrace()" | lldb -p $(pgrep -fn ruby)
在前台打印Ruby回溯(您也可以使用gdb
)
执行日志记录,例如:vagrant --debug up 2> frozen.log
和工作配置到works.log
,然后与差异工具进行比较
sudo dtruss -fn ruby
(或vagrant
),在Linux上使用strace
/ ltrace
来调试过程