我编写了一个 bash 脚本,用于在 Ubuntu 16.04 VPS 首次启动时安装一些软件包。我使用的 VPS 平台在服务器调试过程中运行该脚本。运行时,我收到以下错误:
...
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/
...
我的问题是:我该如何sleep
继续安装直到一切正常?
我已经在 Google 上搜索了相当多的内容来寻找一个可靠的答案(我是 Bash 脚本的新手),并且遇到了几种建议的解决方案,但是有很多噪音。一些答案特定于某些配置系统,其他方法似乎有点怪异。
我目前的解决方案只是sleep 30
脚本的顶部,这绝对不是一个强大的解决方案。
我尝试整理如下内容但似乎不起作用:
while true
do
sudo lsof /var/lib/apt/lists/lock &> /dev/null
[ $? = 0 ] && break
sleep 1
done
在我的个人机器上,它由于错误(WARNING: can't stat() fuse.gvfsd-fuse...
)而永远处于休眠状态,而在 VPS 上,它似乎根本没有处于休眠状态。
有什么想法为什么这不起作用,或者有更好的方法的想法?
顺便说一句,如果您有兴趣,我尝试运行的脚本很简单:
#!/bin/sh
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs
完整输出可以在这个Pastebin。
答案1
将其放入您的脚本中,然后使用 启动您的脚本sudo
。
#!/bin/sh
while [ -f /var/lib/apt/lists/lock
do
# The lock file is found, wait for it to be removed.
sleep 3
done
# The lock file is not found, let's perform our actions.
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs