apt-get upgrade автоматически перезапускает службы

apt-get upgrade автоматически перезапускает службы

У меня есть скрипт unattended для установки серверов. В начале скрипта есть sudo apt-get dist-upgrade --yes. В конце dist upgrade есть противный экран ввода данных пользователем с просьбой перезапустить службы:
введите описание изображения здесь

Можно ли автоматически принимать перезапуски сервиса или отключить этот экран? Он ломает весь мой скрипт. Также я боюсь, что это может привести к зависанию моего сервера в какой-то момент при обновлении...

тот же результат с обновлением apt-get

редактировать: Я пытался, но безуспешно:

#!/bin/bash
sudo apt-get update
sudo apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
sudo apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
sudo apt-get --force-yes clean &&

echo "executing update" &&
sudo apt-get update &&

echo "executing upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq upgrade &&

echo "executing dist-upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq dist-upgrade

решение1

Другие ответы просто пропускаются needrestart.

Но переменная окруженияNEEDRESTART_MODEпозволяет указать режим. И выбрав "(a)automatically", вы можете воспользоваться, needrestartне будучи заблокированными подсказкой:

sudo NEEDRESTART_MODE=a apt-get dist-upgrade --yes

решение2

Как уже упоминалось, проблема в этом случае связана с needrestartкомандой, которая теперь является частью процесса обновления apt-get в Ubuntu (конкретно 22.04, которую я использую). По умолчанию она установлена ​​в «интерактивный» режим, что приводит к прерыванию скриптов.

Чтобы изменить это поведение, мы можем отредактировать /etc/needrestart/needrestart.confфайл, изменив строку:

#$nrconf{restart} = 'i';

к

$nrconf{restart} = 'a';(если мы хотим перезапустить службы автоматически) или $nrconf{restart} = 'l';просто перечислить службы, которые необходимо перезапустить.

Если вы запускаете скрипт и хотите внести изменения без использования интерактивного редактора, такого как vim, вы можете сделать это с помощью sed, например:

sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf

Выглядит некрасиво из-за одинарных кавычек в файле конфигурации и того, как sed обрабатывает одинарные кавычки, но это работает. Пожалуйста, оставьте комментарий, если у вас есть более выглядящий подход.

решение3

Вместо использования sed или редактирования основного файла конфигурации добавьте свой собственный файл конфигурации в /etc/needrestart/conf.d/no-prompt.conf:

$nrconf{restart} = 'a';

решение4

В качестве альтернативы ядуматьВы можете удалитьneedrestartсам пакет.

sudo apt-get remove needrestart

Я использую это для подготовки AWS EC2 на Ubuntu 22.04. По какой-то причине, export DEBIAN_FRONTEND=noninteractiveпохоже, не сработало.

Связанный контент