2016-11-29 72 views
3

我有一個啓動腳本(用戶數據),在啓動時運行在uws 16.04映像的aws中,而我遇到的問題是當它到達它所在的部分運行一本完美的劇本本劇本沒有說這個基本的錯誤信息Could not get lock /var/lib/dpkg/lock。現在,當我登錄並嘗試手動運行安全腳本時,它可以正常工作,但是如果從aws用戶數據運行它,則會失敗並顯示錯誤。Ansible腳本dpkg鎖定aws啓動ubuntu 16.04

這是完全錯誤

TASK [rabbitmq : install packages (Ubuntu default repo is used)] *************** 
task path: /etc/ansible/roles/rabbitmq/tasks/main.yml:50 
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root 
<localhost> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586 `" && echo ansible-tmp-1480352390.01-116502531862586="` echo $HOME/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586 `") && sleep 0' 
<localhost> PUT /tmp/tmpGHaVRP TO /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt 
<localhost> EXEC /bin/sh -c 'chmod u+x /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/ /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt && sleep 0' 
<localhost> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/apt; rm -rf "/.ansible/tmp/ansible-tmp-1480352390.01-116502531862586/" > /dev/null 2>&1 && sleep 0' 
fatal: [localhost]: FAILED! => {"cache_update_time": 0, "cache_updated": 
false, "changed": false, "failed": true, "invocation": {"module_args": 
{"allow_unauthenticated": false, "autoremove": false, "cache_valid_time": 
null, "deb": null, "default_release": null, "dpkg_options": "force- 
confdef,force-confold", "force": false, "install_recommends": null, "name": 
"rabbitmq-server", "only_upgrade": false, "package": ["rabbitmq-server"], 
"purge": false, "state": "present", "update_cache": false, "upgrade": null}, 
"module_name": "apt"}, "msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=-- 
force-confdef\" -o \"Dpkg::Options::=--force-confold\"  install 
'rabbitmq-server'' failed: E: Could not get lock /var/lib/dpkg/lock - open 
(11: Resource temporarily unavailable)\nE: Unable to lock the administration 
directory (/var/lib/dpkg/), is another process using it?\n", "stderr": "E:  Could 
not get lock /var/lib/dpkg/lock - open (11: Resource temporarily 
unavailable)\nE: Unable to lock the administration directory (/var/lib/dpkg/), 
is another process using it?\n", "stdout": "", "stdout_lines": []} 
+0

該問題很可能與「安裝軟件包(使用Ubuntu默認回購)」任務的權限有關。你能用這個任務發佈你的Ansible劇本嗎('/ etc/ansible/roles/rabbitmq/tasks/main.yml')?請包括您的完整UserData腳本。 –

+0

無人蔘與的升級鎖定文件也可能導致此行爲。這個討論可能會有所幫助:https://github.com/chef/bento/issues/609 –

+0

@MichalGasek我會在一秒之內發佈它,但是剛剛嘗試了一些東西,它工作正常。在用戶數據開始時,我放了一個'sleep 5m',現在它工作了,所以現在我不確定這是用戶數據還是問題劇本 –

回答

4

我遇到同樣問題的鎖。我發現Ubuntu在第一次啓動時安裝了一些軟件包,而cloud-init並未等待。

我試圖安裝任何東西之前,使用以下腳本檢查鎖定文件是否可用至少15秒。

#!/bin/bash 

i="0" 
while [ $i -lt 15 ] 
do 
if [ $(fuser /var/lib/dpkg/lock) ]; then 
    i="0" 
fi 
sleep 1 
i=$[$i+1] 
done 

我因爲之前它甚至供應的情況下可以被移除的自動縮放組喜歡這個VS 的原因。