ubuntu22.04更新后弹出交互窗口

使用脚本对ubuntu系统进行更新,已设置让系统以非交互式的模式运行:

export DEBIAN_FRONTEND=noninteractive

但当ubuntu系统为22.04时,还是会卡在交互窗口

Package configuration ┌────┤ Daemons using outdated libraries ├─────┐ ││ ││ │ Which services should be restarted?│ ││ │ [] atd.service↑ │ │ [] chrony.service▮ │ │ [] cron.service▒ │ │ [ ] dbus.service▒ │ │ [ ] getty@tty1.service▒ │ │ [ ] ModemManager.service▒ │ │ [] multipathd.service▒ │ │ [ ] networkd-dispatcher.service▒ │ │ [] packagekit.service▒ │ │ [] polkit.service↓ │ ││ ││ ││ ││ └─────────────────────────────────────────────┘

经搜索,发现ubuntu22.04默认安装了needrestart

needrestart是一个在基于Debian和Ubuntu的Linux系统中广泛使用的工具,主要用于在系统更新(如软件包升级)后,识别并提示需要重启的服务和系统。在进行软件包升级时,有些服务使用的库文件可能会被更新,`needrestart会检测这些变化,并找出那些由于库文件更新而需要重启以应用新库的服务。

needrestart提供交互式界面,允许用户选择是否重启服务。在更新过程中,它会弹出一个对话框,列出需要重启的服务,并让用户决定是自动重启(a选项)、手动选择重启(i选项)还是不重启(n选项)。

解决方法如下:

[ -f /etc/needrestart/needrestart.conf ] && sed -i "s/#\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/" /etc/needrestart/needrestart.conf