3

У меня есть компьютер под управлением сервера Ubuntu.

Иногда, когда я вхожу в ssh, я получаю сообщение, что некоторые пакеты нуждаются в обновлении.

Я обновляю программное обеспечение, выполняя (как root)

aptitude update && aptitude safe-upgrade

Иногда этого достаточно. Но иногда мне нужно перезагрузить компьютер, и мне не сообщают об этом до тех пор, пока я не зайду в ssh. Как я могу узнать раньше?

В идеале я хотел бы обновить, запустив что-то вроде

aptitude update && aptitude safe-upgrade &&
if aptitude needs-reboot ; then shutdown -r now ; fi

но команда aptitude needs-reboot не существует. Что я должен бежать вместо этого?


Разъяснения:

  • На самом деле у меня есть два компьютера, один работает 10.04 (lucid), а другой работает 11.04 (natty). Я надеюсь, что это будет одно и то же решение для обоих.
  • Только решения командной строки, пожалуйста. Один из этих ПК не имеет дисплея, и ни у одного из них нет клавиатуры.

3 ответа3

5

Один из способов подпараметра - может быть, специфичный для Ubuntu - состоит в проверке существования этого файла:

/var/run/reboot-required

Если он существует, требуется перезагрузка.

Таким образом, функция Bash в .bash_rc (и совместно) может сделать эту работу:

function needs_reboot {
  if [ -f /var/run/reboot-required ]; then
    read -p "Restart needed. Reboot? (y/N) " answer;
    if [ "$answer" = "y" -o "$answer" = "Y" ]; then
      reboot;
    fi
  else
    echo "No restart";
  fi
}

Откуда эта идея? MOTD обновляется во время входа в систему процессом pam_motd , считывая его содержимое из каталога /etc/update-motd.d . В этом каталоге есть скрипт /etc/update-motd.d/98-reboot-required (в Ubuntu 12_04), который проверяет наличие нашего /var/run/reboot-required . Видимо, так решают рекомендации по перезагрузке. Таким образом, функция выше просто делает ту же проверку в интерактивном режиме.

Я бы очень хотел получить это напрямую от APT, но пока это работает ...

1

Как насчет этого (запустить от имени пользователя root):apt-get update && apt-get dist-upgrade --dry-run | grep linux-; if [ $? -eq 0 ]; then yes | apt-get dist-upgrade && reboot; else yes | apt-get dist-upgrade; fi

Если есть обновление ядра, grep linux- вернет 0, а затем вы перезагрузитесь. Команда yes может быть заменена на apt-get dist-upgrade --assume-yes . Перезагрузка не будет, если обновление ядра не найдено.

0

Вам нужно перезагрузить компьютер только после обновления ядра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .