我们最近遇到很多系统需要启动很久才能进入系统的情况,实际这个我们如果在有IPMI管理的情况下可以进入虚拟KVM控制台查看到应该是有某些systemd服务异常导致一致卡在某一个阶段导致,当重试多次启动失败以后才会进入系统。
那么我们在系统内可以使用systemctl is-system-running命令查看到非running的状态,检查命令如下
systemctl is-system-running然后这个命令返回具有以下几种状态
running:系统正常完全启动、运行正常
stopped:系统已关机 / 停止
starting:正在开机启动中
stopping:正在关机 / 重启
maintenance:进入紧急维护 / 单用户模式
degraded:系统启动异常,有服务启动失败ystemctl is-system-running命令可以精准判定系统整体运行阶段的状态
这个时候我们可以使用systemctl命令查看启动失败的服务
systemctl --failed查看卡住的服务
journalctl -xb如果检查系统状态是正常的,也可以进行手动切换is-system-running的状态
systemctl start default.target执行完可以再次执行命令检查状态是否running
systemctl is-system-running
使用list-jobs可以查看启动卡住的任务
systemctl list-jobs使用cancel-jobs可以清理卡住等待的任务
systemctl cancel-jobs另外在最后快要进入系统内必须会执行几个基础任务
multi-user.target(多用户模式)
graphical.target(图形界面)
getty(登录终端)
cron(定时任务)
remote-fs.target(远程文件系统)无法确定可以使用isolate来快速安全的进行修复
systemctl isolate multi-user.target如果上述命令无效也可以使用下面一组命令进行强制清理
systemctl cancel-jobs
systemctl daemon-reload
systemctl default实际在我们遇到这种systemd任务卡住的情况多半发生在一些依赖网络的服务,例如将网络存储服务制作成服务单元在systemd中进行管理,那么这些服务依赖网络,在网络还没有准备好的情况下会一直失败让后重试,往复循环导致启动时间非常就,所以我们在需要对这种服务进行修改,在服务单元的配置中添加以下配置
After=network-online.target
Wants=network-online.targetnetwork.target:网卡启用
network-online.target:网络真正连通、能通外网(推荐用这个)
另外我们也可以对system全局配置进行优化
vim /etc/systemd/system.conf
# 网络联机等待超时,单位秒
DefaultTimeoutStartSec=60s
# 启动任务最大排队等待时长
DefaultStartLimitIntervalSec=30s然后重载所有服务单元使其生效
systemctl daemon-reload另外还有其他方式来应对这种问题,就是在服务内添加延迟并设置超时,实际也就是添加一个sleep
[Unit]
After=network-online.target
TimeoutStartSec=20s
[Service]
# 启动前休眠 N 秒
ExecStartPre=/bin/sleep 15
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1173
相关阅读
- ubuntu禁止内核和软件进行自动更新
- ubuntu24.04卸载apt安装的驱动nccl和cuda库
- ubuntu22.04安装dcgm和基本用法
- ubuntu22.04安装cuda失败提示"Uninstall manifest corrupt"
- ubuntu使用ssh命令批量设置集群节点具有sudo权限的账户sudo免密切换
- ubuntu22.04算力环境基础配置一键验证脚本
- ubuntu22.04算力环境基础配置一键脚本
- ubuntu22.04忘记root密码进入单用户模式修改密码
- ubuntu22.04屏蔽使用apt安装软件时出现弹窗要求选择重启服务的方法
- ubuntu22.04删除系统中的新内核并回退的方法
评论列表