Ubuntu 20.04 下遇到 ‘System has not been booted with systemd‘ 报错?别慌,这可能是你的系统用了别的 init

📅 发布时间:2026/7/3 16:32:40 👁️ 浏览次数:
Ubuntu 20.04 下遇到 ‘System has not been booted with systemd‘ 报错?别慌,这可能是你的系统用了别的 init
Ubuntu 20.04 初始化系统探秘当你的世界没有systemd时该怎么办刚接触Linux的新手们常常会惊讶地发现原来操作系统启动后第一个运行的进程PID 1竟然可以有这么多不同的选择。当你兴冲冲地在终端输入systemctl命令却看到System has not been booted with systemd的报错时别急着怀疑人生——这很可能只是你的系统选择了另一条初始化路径。1. 初始化系统的多元宇宙在Linux世界中初始化系统(init system)就像是操作系统的启动管家负责拉起所有必要的服务和进程。虽然systemd已经成为大多数现代Linux发行版的默认选择但它绝非唯一选项。让我们先来认识几位管家界的重量级选手SysV initLinux世界的老牌初始化系统采用顺序执行的启动脚本方式UpstartUbuntu在2006-2015年间使用的替代方案引入事件驱动机制systemd当前主流选择提供并行启动和更精细的服务管理runit轻量级方案常见于容器化环境OpenRCGentoo等发行版偏爱的选择有趣的是你可以在/proc/1/comm文件中直接查看当前系统的PID 1进程名称这是识别初始化系统最直接的方法。2. 为什么你的Ubuntu可能没有systemdUbuntu 20.04默认确实使用systemd但在某些特殊场景下你可能会遇到其他初始化系统2.1 容器化环境Docker容器默认不会运行完整的init系统# 在Docker容器内检查PID 1 cat /proc/1/comm # 通常直接显示你启动容器时指定的命令如bash2.2 WSL1的独特架构Windows Subsystem for Linux第一代直接翻译Linux系统调用不包含完整init# 在WSL1中检查 ps -p 1 -o comm # 通常显示init或特殊的wslinit2.3 老旧或定制化系统某些服务器可能仍运行基于Upstart的Ubuntu 14.04 LTS或者管理员特意移除了systemd。3. 识别你的初始化系统遇到System has not been booted with systemd时先别急着安装systemd而是应该确认当前环境3.1 快速诊断命令# 方法1检查PID 1 ps -p 1 -o comm # 方法2查看初始化系统目录 ls -l /sbin/init # 方法3检查服务管理工具可用性 which service which initctl3.2 常见初始化系统特征初始化系统PID 1名称服务管理命令配置文件位置systemdsystemdsystemctl/etc/systemdUpstartinitinitctl/etc/initSysV initinitservice/etc/init.drunitrunsvdirsv/etc/sv4. 非systemd环境下的服务管理如果你的系统确实没有使用systemd别担心其他初始化系统同样能完成任务4.1 SysV init风格的服务管理# 启动服务 service nginx start # 停止服务 service nginx stop # 查看状态 service nginx status # 启用开机启动Ubuntu方式 update-rc.d nginx defaults4.2 Upstart环境下的操作# 列出所有任务 initctl list # 启动服务 initctl start mysql # 查看配置 cat /etc/init/mysql.conf4.3 直接使用init.d脚本当service命令不可用时可以直接调用# 调用初始化脚本 /etc/init.d/ssh restart # 查看可用服务 ls /etc/init.d/5. 容器环境中的特殊考量在Docker等容器环境中通常不需要完整的init系统但如果你确实需要管理多个进程5.1 使用轻量级init方案# 在Dockerfile中添加runit RUN apt-get update apt-get install -y runit CMD [runsvdir, /etc/service]5.2 多进程管理的替代方案# 使用supervisord apt-get install -y supervisor supervisord -c /etc/supervisor/supervisord.conf6. 何时应该考虑安装systemd虽然大多数情况下可以适应现有的初始化系统但在某些场景下安装systemd可能是合理选择你需要使用依赖systemd的特定软件你更熟悉systemd的管理方式你确实需要systemd提供的某些高级功能6.1 在Ubuntu中安装systemd# 确保软件源配置正确 apt-get update # 安装systemd apt-get install -y systemd # 设置默认使用systemd谨慎操作 systemctl set-default multi-user.target警告在容器环境中强制使用systemd可能导致不可预期行为通常不建议这样做。7. 深入理解初始化系统的选择不同的初始化系统设计哲学反映了Linux社区的多元文化SysV init的简洁性适合资源受限的环境Upstart的事件驱动尝试解决依赖关系的复杂性systemd的一体化提供统一的管理接口runit的轻量级容器时代的宠儿在实际运维中我经常遇到一些老旧的Ubuntu 14.04服务器仍然运行着Upstart。有一次迁移服务时花了大半天时间才意识到服务启动失败是因为Upstart的配置文件语法与systemd完全不同。那次经历让我明白理解不同初始化系统的差异绝不是纸上谈兵。