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

dav*_*420 4 ubuntu-server ubuntu

我有一台运行 Ubuntu 服务器的 PC。

有时当我 ssh 进入它时,我收到一条消息,说某些软件包需要升级。

我通过运行(以 root 身份)来升级软件

aptitude update && aptitude safe-upgrade
Run Code Online (Sandbox Code Playgroud)

有时这就足够了。但有时我也需要重新启动,直到我随后通过 ssh 登录后才被告知。怎样才能早点知道?

理想情况下,我想通过运行类似的东西来升级

aptitude update && aptitude safe-upgrade &&
if aptitude needs-reboot ; then shutdown -r now ; fi
Run Code Online (Sandbox Code Playgroud)

但该aptitude needs-reboot命令不存在。我应该跑什么?


说明:

  • 实际上我有两台 PC,一台运行 10.04(清晰),另一台运行 11.04(整洁)。我希望这对两者都是相同的解决方案。
  • 请严格使用命令行解决方案。其中一台 PC 没有显示器,也没有键盘。

Eri*_*ton 7

一种低于标准的方法——可能特定于 Ubuntu——是检查此文件的存在:

/var/run/reboot-required
Run Code Online (Sandbox Code Playgroud)

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

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

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
}
Run Code Online (Sandbox Code Playgroud)

这个想法从何而来?MOTD 在登录时由pam_motd进程更新,从/etc/update-motd.d目录中读取其内容。在这个目录中,有一个/etc/update-motd.d/98-reboot-required脚本(在 Ubuntu 12_04 上)检查我们的/var/run/reboot-required. 这显然是重新启动建议的决定方式。所以上面的函数只是以交互方式进行相同的检查。

我真的很想直接从 APT 获得它,但就目前而言,这有效......