You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在apt升级时如何跳过重启服务的交互式提示?

在apt升级时如何跳过重启服务的交互式提示?

我太懂你这种头疼了——远程Ubuntu开发环境每次SSH登录都要跑升级脚本,结果被服务重启的交互式提示打断,而且环境一重启就重置,必须全程自动化搞定对吧?

你当前的脚本已经尝试设置了DEBIAN_FRONTEND=noninteractiveNEEDRESTART_MODE=a,但问题可能出在sudo的环境隔离上:你在当前shell导出的环境变量,默认不会被sudo执行的进程继承,导致apt和needrestart还是会跳出提示。

给你两个靠谱的解决办法,适配你的场景:

方法一:让sudo继承当前环境变量

sudo -E参数保留当前shell的环境变量,这样你导出的两个配置变量就能传递给apt进程。修改后的脚本如下:

#!/bin/bash

export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=a

sudo -E apt-get -y update
sudo -E apt-get -y upgrade
sudo -E apt-get -y dist-upgrade
sudo -E apt-get -y --fix-broken install

-E的作用就是让sudo继承当前用户的环境变量,确保apt能读到你设置的非交互式模式和自动重启服务的配置。

方法二:直接在sudo命令中指定环境变量

如果担心环境变量继承出问题,更稳妥的方式是把环境变量直接写在sudo的apt命令前,这样每个apt进程都会明确获取到配置:

#!/bin/bash

sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get -y update
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get -y upgrade
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get -y dist-upgrade
sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt-get -y --fix-broken install

补充说明

  • DEBIAN_FRONTEND=noninteractive:强制apt全程以非交互式运行,跳过所有需要手动输入的确认步骤;
  • NEEDRESTART_MODE=a:让needrestart工具自动重启所有需要更新的服务,无需用户确认——刚好适配你的环境(重启就会被重置,自动重启完全无负担)。

备注:内容来源于stack exchange,提问作者David Alsh

火山引擎 最新活动