Ansible: apt:update_cache = yes在ansible 1.3中失败(?)

创建于 2013-09-17  ·  18评论  ·  资料来源: ansible/ansible

运行时出现1.3中的新错误

apt: update_cache=yes:

产量

msg: Failed to lock apt for exclusive operation

但是,我可以在该节点上很好地运行sudo apt-get update,并且在升级到1.3之前可以正常工作。故障发生在多个节点上。

我回复到ansible 1.2.3,问题消失了。

在邮件列表上,有人认为这是因为未调用sudo。

我在受控节点上运行Ubuntu 12.04。

我正在使用角色(1.3中的任何更改均未更新)。

顶级node.yml文件定义了以下角色:

- name: apply common configuration to all nodes
  hosts: all
#  connection: fireball

  roles:
    - common

在该特定链中似乎没有任何东西调用sudo,这肯定是错误的。 我不明白为什么它在1.3版之前有效。在其他地方,我在需要时专门调用sudo。

我认为1.3允许按卷使用sudo更容易-我将对此进行调查。

最有用的评论

Ubuntu 16.04

对于Ubuntu 16.04用户(尽管我认为它也可能在15.04中发生),Ubuntu附带已默认启用unattended-upgrade 。 如@bcoca所述,它会定期(通常每天)检查安全更新。 因此解决方案是在触摸APT之前添加任务:

- name: kill automatic updating script, if any
  command: pkill --full /usr/bin/unattended-upgrade
  become: true
  register: kill_result
  failed_when: kill_result.rc > 1 # rc == 1 if the script is inactive
  changed_when: kill_result.rc == 0

这应该是安全的,因为脚本将稍后由系统再次启动。

所有18条评论

您如何使用-K调用ansible-playbook? 1.3中有一个更改,必须显式指定sudo,因为-K标志不会使任务隐式使用sudo。

是的,我在大多数地方都使用-K并显式使用sudo,但是在
这种特定的情况。 因此,这可能就是问题。

非常敬意

丹·卡雅各布

2013年9月17日,星期二,下午4:23,James Cammarata
[email protected]

您如何使用-K调用ansible-playbook? 1.3发生了变化
必须将sudo明确指定为-K标志将不会执行任务
隐式使用sudo。

-
直接回复此电子邮件或在Gi tHub上查看它

好的,我让你确认一下,如果是的话,我们将关闭它。 谢谢!

会做。 谢谢!

非常敬意

丹·卡雅各布

2013年9月17日,星期二,下午4:27,James Cammarata
[email protected]

好的,我让你确认一下,如果是的话,我们将关闭它。 谢谢!

-
直接回复此电子邮件或在Gi tHub上查看它

有什么跟进吗?

如果您仍然有问题,请继续解决此问题。 谢谢!

我也遇到了这个问题。 运行1.3.2,但我没有旧版本引用。

使用-KI时出现另一个故障:ssh连接关闭,等待sudo密码提示。

最后,我需要不在交互模式下运行此命令,因此-K不能成为最终答案。

详细信息:手动运行:host1。***是已编辑的FQDN

vagrant @ ansible-head :〜$ sudo -u vagrant ansible-playbook -i库存ubuntu-apache2.yaml

PLAY [网络服务器] * * * * * * * * * * * * * * * * * * * *

汇总事实* * * * * * * * * * * * * * * * * * * * * *
好的:[host1。**]

任务:[更新apt缓存] * * * * * * * * * * * * * * * * * *
失败:[host1。**] => {“失败”:true}
味精:无法锁定易于进行独占操作

致命:所有主机均已发生故障-正在中止

PLAY RECAP * * * * * * * * * * * * * * * * * * * * * *
要重试,请使用:--limit @ / home / vagrant / ubuntu-apache2.yaml.retry

host1。***:ok = 1更改= 0不可达= 0失败= 1

手动运行ansible get是相同的错误:

vagrant @ ansible-head:〜$ sudo -u vagrant ansible网络服务器-i库存-m apt -a“ update_cache = yes

host1。*** | 失败>> {
“失败”:是的,
“ msg”:“无法锁定易于进行独占操作”
}

@Ravenwater这似乎是一个不同的问题,您可以为此打开一个新的github问题吗? 您可能还想在邮件列表上询问其他人是否遇到了该问题。 谢谢!

我在ansible 1.3.4中遇到类似的问题。

如果我使用:

apt: update_cache=yes:

我收到相同的错误消息:

msg: Failed to lock apt for exclusive operation

同样,使用update_cache选项安装软件包时:

apt: pkg=openjdk-6-jre-headless state=installed update_cache=yes cache_valid_time=604800

显示类似的错误:

msg: 'apt-get install 'openjdk-6-jre-headless' ' failed: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

错误间歇出现。 实际上,在ubuntu 12.04上使用了一组50个EC2虚拟机(全部使用相同的基本映像ami-e50e888c)。 根据测试,错误会在5到20之间出现。

在剧本中指定了“ sudo:true”。

这通常与消息中所说的完全一样,或者您没有
锁定dpkg db或其他人(或您在其他进程中)的权限
已将其锁定(如果我在中间按Control + C并尝试
再次)。

是。 但是将其与具有相同配置的相同OS的50个VM一起使用时,在某些情况下可以正常工作,而在另一些情况下则会失败。 此外,如果我重试剧本3到4次,它最终将在所有节点上正常工作。

@micafer是否有可能其他用户/进程同时在这些计算机上调用apt?

我正在使用为此测试专门创建的50个VM进行测试,并且我是所有这些中的唯一用户。
我不知道ubuntu是否有一些使用apt命令的内部进程(cron或类似程序)。

ubuntu每天都会破坏缓存更新,通常会逐步执行,以免
如果您已无人值守安装并且出现了“雷电群”问题,
启用后,您还将获得自动安全更新,该更新还将锁定
这个。

我会投票赞成重新开放这个问题,因为在现实生活中,这种情况很可能会发生,而ansible应该为此提供解决方案,这个解决方案不需要人工尝试就可以解决。

Ubuntu 16.04

对于Ubuntu 16.04用户(尽管我认为它也可能在15.04中发生),Ubuntu附带已默认启用unattended-upgrade 。 如@bcoca所述,它会定期(通常每天)检查安全更新。 因此解决方案是在触摸APT之前添加任务:

- name: kill automatic updating script, if any
  command: pkill --full /usr/bin/unattended-upgrade
  become: true
  register: kill_result
  failed_when: kill_result.rc > 1 # rc == 1 if the script is inactive
  changed_when: kill_result.rc == 0

这应该是安全的,因为脚本将稍后由系统再次启动。

只是说它对我不起作用,即使使用了上面的命令,该锁仍然保持在原位。 但是,当我在EC2上进行部署时,我只是通过手动删除unattended-upgrades来更新基本映像。

此页面是否有帮助?
0 / 5 - 0 等级