Назад | Перейти на главную страницу

OpenVZ exec и невозможно повторно открыть стандартный ввод / Невозможно заблокировать каталог администрирования

Я запускаю следующую команду во всех контейнерах OpenVZ для обновления / обновления:

vzctl exec2 $VM "apt-get update & apt-get upgrade"

Во всех случаях я получаю следующую ошибку:

dpkg-preconfigure: unable to re-open stdin: No such file or directory

А при наличии обновлений запрос «Продолжить» пропускается. Также dpkg не может установить блокировку:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Как я могу это исправить?

Попробуй это:

vzctl enter $VM --exec "apt-get update && apt-get upgrade"

&& означает «Если предыдущая команда завершилась успешно, переходите к следующей».

Из http://wiki.openvz.org/Man/vzctl.8:

команда exec CTID

Выполняет команду в контейнере. Переменные среды не устанавливаются внутри контейнера. Обработчики сигналов могут отличаться от настроек по умолчанию. Если команда -, команды читаются из стандартного ввода.

команда exec2 CTID

То же, что и exec, но код возврата - это команда.

С другой стороны

введите CTID [--exec command [arg ...]]

Входит в контейнер (давая корневую оболочку контейнера).

Опция --exec используется для запуска команды с аргументами после входа в контейнер. Это полезно, если для запуска команды требуется терминал

Не используйте эту идиому «apt-get update & apt-get upgrade», поскольку обновление будет продолжаться одновременно с обновлением, что приведет к блокировке базы данных обновлением, и обновление завершится ошибкой.

Одно из следующих будет правильным:

vzctl введите $ VM --exec "apt-get update && apt-get -y upgrade" [примечание: отредактированный ответ Javix выше]

или

vzctl введите $ VM --exec "apt-get update; apt-get -y upgrade"

По первой команде обновление будет продолжено, только если обновление прошло успешно. Во втором случае все равно будет предпринята попытка.

Для каждого из них я также добавил -y для обновления, чтобы ответить «да» на любые вопросы, что полезно для таких автоматических обновлений, как это.