Linux系统怎么查看服务启动失败的原因 journalctl排查技巧
Linux服务启动失败?别慌,journalctl排查技巧全解析

服务启动失败,是运维工作中最常遇到的“老朋友”。一个核心技巧是:直接运行 journalctl -u 服务名 -n 50 -e,90%的问题根源就藏在最后那几行日志里。 这相当于直接翻到故障剧本的最后一页,往往答案就在那里。但有时候,剧本本身可能就出了问题,或者记录剧本的本子不见了。接下来,我们就顺着这条线索,把几种常见的“查不到”和“看不懂”的情况彻底理清。
journalctl -u 查不到日志?先确认服务名和 unit 文件是否加载成功
首先得明确一点:journalctl -u 只追踪那些已经被系统加载的 unit。所以,如果命令执行后一片空白,别急着怀疑日志系统,很可能第一步就踩了坑。
最常见的情况是服务名输错了。比如,完整的服务名通常是 nginx.service,但很多人会习惯性地只输入 nginx。更隐蔽的情况是,服务根本没安装,或者安装了但未被启用。这时候,可以先用 systemctl list-units --type=service | grep 服务名 看看它是否在运行的服务列表中。再用 systemctl status 服务名 仔细检查输出:重点看“Loaded”这一行,它显示了 unit 文件的路径以及是否启用(enabled)。如果这里显示的是 not-found(找不到文件)或者 masked(被屏蔽),那么 journalctl -u 自然就无迹可寻了。
为什么 journalctl -u 显示 “No entries”?检查 journal 是否持久化
遇到过这种情况吗?昨天服务明明崩溃过,今天用 journalctl -u 却什么也查不到。这很可能不是灵异事件,而是 journal 的存储方式在作祟。
默认情况下,systemd journal 的日志只保存在内存或 /run/log/journal/ 目录下,一旦重启,这些记录就烟消云散了。如果服务故障发生在上一次启动周期内,而你的系统又没有配置持久化日志,那么查询结果为空就再正常不过了。
此时,可以尝试使用 journalctl -b -u 服务名 来查询本次启动以来的所有相关日志。但治本之策,是检查并启用持久化。方法很简单:打开 /etc/systemd/journald.conf 配置文件,找到 Storage= 这一项。如果它是 volatile(易失的),就改为 persistent(持久的)。然后,手动创建存储目录并重启服务:mkdir -p /var/log/journal && systemctl restart systemd-journald。这样一来,日志就能在重启后幸存下来了。
日志里只看到 “Failed to start”,但没具体错误?加 --no-pager + grep -i
有时候,systemctl status 给出的那句“Failed to start”就像一份语焉不详的病情通知书,关键细节全被隐藏了。问题往往出在分页器上——重要的错误信息可能被截断,或者淹没在海量的 INFO 级别日志里。
这时候,需要更粗暴直接的过滤方式:journalctl -u 服务名 --no-pager | grep -i “fail\|error\|refused\|timeout\|denied”。这个命令能帮你把包含关键错误线索的行全部揪出来。特别要警惕以下几种高频“暗号”:
Permission denied:别只盯着文件权限。这很可能是 SELinux 安全上下文不对(用ls -Z检查),或者是 systemd 的ProtectHome=true等安全特性阻止了服务访问特定目录。Address already in use:端口冲突的老问题。但注意,netstat -tulpn可能看不到由 socket 激活的服务,更推荐使用ss -tlnp来检查。status=217/USER:这通常指向 unit 文件中User=指定的用户不存在,或者该用户的 Home 目录无法访问。No such file or directory:最常见的是ExecStart指定的可执行文件路径写错了,或者是程序依赖的动态库缺失(用ldd /path/to/binary验证一下)。
日志没报错,但服务就是不起来?试试 journalctl -b -p err
最让人头疼的情况莫过于此:服务的日志干干净净,但它就是启动失败。这说明,问题可能不在服务本身,而在它所依赖的“环境”上。
比如,服务配置了网络访问,但启动时网络尚未就绪(缺少 After=network-online.target 依赖);或者服务需要精确时间来进行 TLS 握手,但系统时间未同步(缺少 After=time-sync.target)。甚至,可能是根文件系统意外变成了只读状态(用 df -h / 检查一下)。
这时,应该把视野放宽。运行 journalctl -b -p err,查看本次系统启动以来所有错误级别(err)及以上的日志。真正的罪魁祸首,往往在你的服务尝试启动之前就已经出现了。这才是解决问题的关键线索。
说到底,真正卡住人的,往往是那些“沉默的失败”。环境变量缺失、工作目录不可写、EnvironmentFile= 指向的配置文件不存在,甚至只是 $PATH 环境变量里缺少了 /usr/local/bin 这样的路径。因此,别只死盯着 journalctl -u 的输出。一个更有效的思路是:通过 systemctl show 服务名 命令,仔细查看系统实际为服务设置的环境(Environment)、工作目录(WorkingDirectory)和运行用户(User),然后尝试手动在命令行复现 ExecStart 的命令。很多时候,手动执行一下,错误就会自己跳出来告诉你答案了。
相关攻略
安伯尼克为其RGDS双屏掌机发布了全新的定制Linux系统。该系统针对双屏硬件进行了专门优化,提供独立调节上下屏亮度、屏幕翻转等功能,并内置DS游戏专属菜单实现一键启动。用户可通过microSD卡安装该系统,并能通过插拔存储卡在Linux与Android双系统间便捷切换。此外,系统还通过全能模拟器
Linux服务启动失败?别慌,journalctl排查技巧全解析 服务启动失败,是运维工作中最常遇到的“老朋友”。一个核心技巧是:直接运行 journalctl -u 服务名 -n 50 -e,90%的问题根源就藏在最后那几行日志里。 这相当于直接翻到故障剧本的最后一页,往往答案就在那里。但有时候,
Linux系统硬件信息查看:四条命令覆盖九成日常场景 想快速摸清一台Linux服务器的硬件底细?其实不必翻箱倒柜找文档。日常工作中,九成以上的硬件信息查询需求,靠下面这四条命令就能搞定。其余的,大多属于特定场景下的补漏方案,或是权限不足时的替代选择。 lscpu、free -h、lsblk、lspc
10 月 6 日消息,Linux 6 18 的网络子系统更新现已正式合并,为新版本内核带来了多项性能优化、新硬件支持及安全性提升。这些改进将涵盖有线与无线网络设备,为即将成为长期支持版(LTS)的
10 月 26 日消息,Canonical 发文,宣布推出 Canonical Academy 专业技能认证平台,旨在通过基于 Ubuntu 的实操考试,帮助用户验证其在开源领域的专业技能。目前,
热门专题
热门推荐
在亚马逊FBA运营中,商品入仓前正确粘贴FNSKU标签是至关重要的第一步。这串看似简单的条形码,直接决定了库存的精准识别、订单的准确履行,更是构建品牌库存护城河、有效防止跟卖的核心防线。切勿轻视——标签打印模糊、粘贴位置错误,极易导致货物被FBA仓库拒收,甚至引发库存数据混乱,造成不必要的损失。 本
在《逸剑风云决》的武侠世界中,玩家时常会遭遇身陷重围、濒临绝境的危机时刻。而就在这胜负将分的紧要关头,有时会有一股神秘力量骤然介入,彻底扭转战局——那便是行事诡秘的厂卫。他们的登场,绝非寻常的“援军抵达”,更像是一把精心设计的钥匙,悄然开启了江湖帷幕背后,那重更为错综复杂、暗流涌动的剧情篇章。 逸剑
《绝地求生》第41赛季已全面开启,备受玩家关注的“电波干扰背包”迎来了自上线以来最大规模的机制重做。官方更新日志已经发布,本文将为您深入解析本次调整的核心要点与实战影响,帮助您在新赛季中精准掌握这件战术装备的全新玩法。 简而言之,本次更新的核心理念是“风险与收益的再平衡”。开发团队显然评估了该背包在
打造一套高胜率的绯月絮语阵容,核心在于角色间的精准定位与战术协同。这不仅仅是简单堆砌高战力角色,更需要深入理解各位置的战略职能,以及他们如何通过技能组合产生“1+1>2”的团队效应。 核心输出角色的选择 阵容的战术轴心通常由一至两位核心输出角色奠定。例如,以极致单体爆发见长的[角色名 1],其终结技
在跨境电商领域,Temu凭借其独特的全托管模式和强大的供应链整合能力,已成为众多卖家出海拓展业务的重要选择。然而,不少卖家在准备入驻时,常被一个看似简单的系统提示所阻碍——“注册码长度为15位”,导致注册流程中断,甚至可能错失快速开店的宝贵时机。 本文将深入解析此问题的根本原因,并提供一套清晰、可操





