如何检查是否可以在 bash 脚本中安全地使用 apt 安装某些东西?

如何检查是否可以在 bash 脚本中安全地使用 apt 安装某些东西?

我编写了一个 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

相关内容