如何知道在 Ubuntu 中升级软件包后是否需要重新启动?

如何知道在 Ubuntu 中升级软件包后是否需要重新启动?

我有一台运行 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)。我希望两台电脑都有相同的解决方案。
  • 请严格遵循命令行解决方案。其中一台电脑没有显示器,两台电脑都没有键盘。

答案1

一种不太好的方法(可能特定于 Ubuntu)是检查此文件是否存在:

/var/run/reboot-required

如果存在,则需要重新启动。

因此,Bash 中的函数.bash_rc(和 co.)可以完成这项工作:

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 获得它,但就目前而言,这可行......

答案2

这样怎么样(以 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。如果未找到内核更新,则不会重新启动。

答案3

如果内核升级了,则仅需要重新启动。

相关内容