跳到主要内容

Ubuntu 16.04.4 遇到 a start job is running for Hold until boot process finishes up

· 阅读需 3 分钟

昨天在启动 Ubuntu 16.04.4 LTS 系统时遇到一个很奇怪的问题:能够正常启动 X 环境、登录、进入桌面。但是按 Ctrl+Alt+F1 切换到命令行界面 tty1 时却出现了启动 splash 界面,按向上方向键查看启动信息时,发现最下面一行显示:

a start job is running for Hold until boot process finishes up (?min?s/no limit)

由于图形界面能够正常使用,尝试在图形界面下直接重启机器观察是否能够自动解决。重启后依然出现这个问题。

偶然将机器连接上网,系统正常启动,图形界面与命令行界面均正常。

因此怀疑是 Ubuntu 系统自动进行 APT 下载和更新功能阻塞了启动过程。反正平时就有不定时手动进行下载和更新的习惯,干脆全面禁用自动下载和更新特性。Ubuntu 16.04 LTS 版本中涉及禁用 APT 自动下载和更新的地方有三个:

  1. /etc/apt/apt.conf.d/ 下的配置文件

修改或创建 /etc/apt/apt.conf.d/10periodic 中的配置内容如下:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
  1. Systemd 的定时任务

使用 sudo systemctl list-unit-files | grep apt 命令查看机器上与 APT 有关的全部 Systemd 定时任务或服务文件,一般有以下几个:

apt-daily-upgrade.service
apt-daily.service
apt-daily-upgrade.timer
apt-daily.timer

其中 .service 后缀的为服务,.timer 后缀的为定时任务。执行下列命令全部禁用:

sudo systemctl disable apt-daily-upgrade.service
sudo systemctl disable apt-daily.service
sudo systemctl disable --now apt-daily-upgrade.timer
sudo systemctl disable --now apt-daily.timer

附注:几个可用的 Systemd 启动故障排除命令

sudo systemd-analyze blame
sudo systemd-analyze critical-chain
sudo systemd-analyze critical-chain network.target local-fs.target

sudo systemctl list-dependencies

参考

  1. Ubuntu 16.04 slow boot (apt-daily.service)
  2. long boot time apt-daily.service 4 minutes.