Eu escrevi um script bash para instalar alguns pacotes na primeira inicialização do meu Ubuntu 16.04 VPS. A plataforma VPS que estou usando o executa durante o processo de comissionamento do servidor. Quando é executado, estou recebendo esse tipo de erro:
...
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
...
Então, minha pergunta é: Como faço para sleep
até que tudo esteja bem, vá em frente com a instalação?
Eu fiz um pouco de pesquisando para encontrar uma resposta sólida para isso (sou novo no bash scripting), e encontrei várias soluções propostas, mas há muito barulho. Algumas respostas são específicos de determinados sistemas de provisionamento, e outras abordagens parecem um pouco hacky .
Minha solução no momento é apenas um sleep 30
no topo do meu script, o que definitivamente não é uma solução robusta.
Eu tentei montar algo assim, mas parece que não funciona:
while true
do
sudo lsof /var/lib/apt/lists/lock &> /dev/null
[ $? = 0 ] && break
sleep 1
done
Na minha máquina pessoal, ele dorme para sempre por causa de um erro ( WARNING: can't stat() fuse.gvfsd-fuse...
) e, no VPS, parece que não dorme nem um pouco.
Alguma idéia de por que isso não funciona, ou ideias para uma abordagem melhor?
A propósito, se você estiver interessado, o script que estou tentando executar é simplesmente:
#!/bin/sh
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs
E a saída completa pode ser vista em este pastebin .