我写了一本Ansible剧本,其中包括apt-get dist-upgrade
。我确保在游戏手册的顶部放置become: true
和become_user: root
,以便获得sudo访问权限以进行升级。这在我的Vagrant虚拟机本地工作正常,但在我们的生产系统(Ubuntu 16.04)上运行时,我们收到以下错误:
Failed to lock apt for exclusive operation
我们当前的解决方法是通过SSH连接到计算机,然后手动运行sudo apt-get dist-upgrade
。然后退出SSH会话并再次运行ansible playbook并且它可以工作。
我们的剧本中的其他任务需要sudo访问并且正常工作。只是apt命令失败了。我们尝试重新启动计算机,并将become: true
和become_user: root
替换为sudo: yes
,但无济于事。
有关如何解决此问题的任何想法?我将在下面列出我们剧本的相关部分。
- become: true
become_user: root
name: Setup the mongo database servers
hosts: sgmongo-{{ customer }}-ciadmin
tasks:
-
name: Ensure OS is upgraded with all patches
apt: upgrade=dist update_cache=yes
答案 0 :(得分:0)
我通过使用Ansible调用shell脚本来做到这一点,就像这样:
Ansible调用的相关脚本在这里:https://github.com/zimmertr/Bootstrap-Kubernetes-with-QEMU/blob/master/files/bash_scripts/monitor_automatic_updates_status.sh
它只是连续检查apt
是否在系统上运行。并且,当它最终完成运行时,允许Ansible继续。
答案 1 :(得分:-1)
好像你已经中断了apt命令。尝试通过运行:
删除/var/lib/apt
下的apt锁定文件
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock