Как проверить, могу ли я безопасно установить что-нибудь с помощью apt во время сценария bash? [дубликат]

Я написал сценарий 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/
...

Итак, мой вопрос: Как мне спать , пока все в порядке, продолжайте установку?

Я выполнил довольно немного погуглил, чтобы найти твердый ответ на этот вопрос (я новичок в сценариях bash), и натолкнулся на несколько предлагаемых решений, но есть много шума. Некоторые ответы относятся к определенным системам обеспечения, а другие подходы кажутся немного хакерскими .

Мое решение на данный момент - это просто sleep 30 в верхней части моего скрипта, что определенно не является надежным решением.

Я попытался собрать что-то вроде этого, но это не сработало:

while true
do
  sudo lsof /var/lib/apt/lists/lock &> /dev/null
  [ $? = 0 ] && break
  sleep 1
done

На моем личном компьютере он спит вечно из-за ошибки ( ВНИМАНИЕ: невозможно stat () fuse.gvfsd-fuse ... ), а на VPS он вообще не спит.

Есть идеи, почему это не работает, или идеи по поводу лучшего подхода?


Кстати, если вам интересно, сценарий, который я пытаюсь запустить, выглядит просто:

#!/bin/sh
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs

И полный вывод можно увидеть в this pastebin .

0
задан 14 October 2017 в 23:46

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
0
ответ дан 2 November 2019 в 03:01

Другие вопросы по тегам:

Похожие вопросы: