Linux WSL 实操(模块 4):Systemd 服务控制与 Journald 日志排查

发布时间:2026/9/27 2:52:10
Linux WSL 实操(模块 4):Systemd 服务控制与 Journald 日志排查 Linux WSL 实操模块 4Systemd 服务控制与 Journald 日志排查本系列基于Ubuntu on WSL2做 Linux 实操共 10 个模块模块内容1模块 1WSL 环境适配与 systemd 启用2模块 2目录结构与核心文件操作3模块 3用户与文件权限管理4systemd 服务控制与 journald 日志排查← 本文5Nginx 静态站点6反向代理7Shell 脚本基础8脚本进阶与 crontab9Docker 与 Compose10多容器编排本篇目标把systemctl的 start / stop / restart / reload / enable / disable / status 全部练熟学会用journalctl实时看日志、按时间筛日志、定位报错最后用「故意改坏 nginx 配置 → 排错 → 恢复」做一次完整演练。一、为什么要学 systemd 和 journald模块 1 我们确认了 systemd 是 1 号进程。本篇就把它真正用起来。先搞清一个基本模型Linux 里所有长期运行的服务nginx、mysql、docker都不是你手动敲起来的而是交给 systemd 统一管理的。systemd (PID 1) ├── nginx.service ← 每个服务是一个 unit ├── ssh.service ├── docker.service └── ...systemd 帮我们解决三件事问题对应命令服务怎么启动/停止/重启systemctl start/stop/restart/reload服务现在活着吗开机自动起来吗systemctl status/is-active/is-enabled服务挂了为什么挂journalctl为什么日志要用journalctl而不是tail -f /var/log/xxx.log对比tail -f 日志文件journalctl覆盖范围只有你指定的那一个文件所有服务统一管理按服务过滤做不到-u nginx一条就够按时间过滤做不到--since/--until日志轮转后老内容被切走看不到了仍在 journal 里可查附带解释无-x会告诉你可能的原因一句话tail -f是盯一个文件journalctl是查一台机器。排错优先用 journalctl。二、启动服务start / is-active / statussudosystemctl start nginx systemctl is-active nginx systemctl status nginx子命令含义start启动服务is-active只回答活着吗输出active或inactive适合脚本判断status详细状态包含是否运行、PID、最近几行日志预期输出is-active输出activestatus里有绿色active (running)。按q退出。status是最该先敲的命令——它一次给你状态、PID 和最近日志是排错的第 0 步。三、停止服务stopsudosystemctl stop nginx systemctl is-active nginxcurl-Ilocalhost子命令含义stop停止服务预期输出is-active输出inactivecurl报Connection refused服务停了端口没人听。⚠️验证完记得sudo systemctl start nginx起回来否则后面模块 5 做静态站点时会一脸懵。四、reload 与 restart 的区别重点这两个最容易被混用但后果完全不同。sudosystemctl reload nginxsudosystemctl restart nginx systemctl is-active nginx子命令行为PID已有连接reload重新读配置不重启进程不变不断restart整个停掉再起来会变会断两条都成功is-active输出active。怎么亲眼验证 PID 变没变systemctl show nginx-pMainPID操作MainPIDreload后不变restart后会变⚠️ 关键风险操作配置有语法错误时reload可能失败但旧进程还在跑安全线上没断restart可能直接起不来服务彻底挂掉事故所以流程固定为先nginx -t测语法再reload。记法reload是改完配置让它重读restart是掀桌子重来。改配置优先 reload。五、enable 与 disable开机自启sudosystemctl disable nginx systemctl is-enabled nginxsudosystemctlenablenginx systemctl is-enabled nginx子命令含义enable设为开机自动启动本质是建一个软链接到/etc/systemd/system/...disable取消开机自启删掉那个软链接。不影响现在跑不跑is-enabled查询自启状态输出enabled/disabled/static预期输出disable后输出disabledenable后输出enabled。⚠️ enable ≠ start命令管的是enable下次开机要不要起来start现在要不要起来两个是独立的两件事所以常用组合是sudosystemctlenable--nownginx--now就是设开机自启的同时现在也启动。六、journalctl -u nginx -f实时滚动日志sudojournalctl-unginx-f片段含义journalctl查询 systemd 统一日志journald的命令-u nginxunit只看 nginx 这一个服务的日志其他全部过滤掉-ffollow跟随不退出有新日志立刻滚出来和tail -f一个感觉验证步骤敲完会卡住等新日志。另开一个窗口敲curl localhost或sudo systemctl restart nginx。回到这边应该立刻看到新的日志行冒出来。Ctrl C退出。这个组合是运维看日志的日常动作一个窗口-f盯着另一个窗口造流量。七、journalctl -xe看最近的详细报错sudojournalctl-xe选项含义-xexplain附带解释文字告诉你这条日志可能是什么原因-eend直接跳到末尾最新的部分不用自己翻半天直接停在最后几屏红色的行就是错误。按↑↓翻按q退出。想只看某个服务就加-usudojournalctl-unginx-xe--no-pager–no-pager 是什么不加的话journalctl会进入翻页模式像less不能直接用管道二次处理。加上--no-pager就一次性全打出来方便配合grep或head过滤sudojournalctl-unginx --no-pager|greperror|head-20八、journalctl --since按时间段捞日志这是 journalctl 比tail -f强最明显的地方——能精确指定时间窗。sudojournalctl-unginx--since1 hour agosudojournalctl-unginx--sincetodaysudojournalctl-unginx--since2026-09-07 00:00--until2026-09-26 20:40选项含义--since从这个时间点之后开始看--until看到这个时间点为止1 hour ago支持人话写法还有30 min ago、2 days ago、yesterday、today绝对时间也可以写死2026-09-07 00:00这种格式两个配合就是精确时间窗实用组合需求命令看最近 1 小时journalctl -u nginx --since 1 hour ago看今天的journalctl -u nginx --since today精确定位某段时间比如故障时段journalctl -u nginx --since ... --until ...只看错误级别journalctl -u nginx -p err --since today故障复现时间点很关键先记下大概几点出的问题再用--since/--until圈定范围比盲目翻日志快十倍。九、实战演练故意改坏 nginx 配置再用 journalctl 排错前面都是单条命令的练习现在做一次完整故障排查闭环。这是本篇最有价值的部分。9.1 先备份铁律sudocp/etc/nginx/sites-enabled/default /tmp/default.bak片段含义cp ... /tmp/default.bak先备份一份改坏了能还原改配置前先备份这是铁律sites-enabled/defaultnginx 的默认站点配置文件9.2 制造故障sudonano/etc/nginx/sites-enabled/default操作找到root /var/www/html;这一行把行尾的分号删掉保存退出CtrlO回车 →CtrlX。9.3 先用 nginx -t 测语法关键一步sudonginx-t片段含义nginxnginx 主程序-ttest只检查配置文件语法不真的启动预期输出nginx: [emerg] unexpected } ...之类并明确告诉你出错在第几行、是哪个文件。⚠️永远不要跳过这一步不测语法就 restart服务起不来还得回滚线上就是事故。9.4 用 journalctl 把错误行揪出来sudosystemctl restart nginx systemctl is-active nginxsudojournalctl-unginx-xe--no-pager|tail-20sudosystemctl status nginx片段含义| tail -20管道把 journalctl 的输出交给 tail只看最后 20 行status里的红色行systemd 会把服务启动失败的原因直接贴在这里预期输出restart失败is-active输出failed或inactive日志里明确写出出错的文件和行号。9.5 修复并验证sudonano/etc/nginx/sites-enabled/defaultsudonginx-tsudosystemctl restart nginx systemctl is-active nginx操作把分号加回去 →nginx -t应输出syntax is ok/test is successful→restart→is-active输出active。十、⚠️ 排错的标准流程背下来① systemctl status 服务 → 看状态、看最近日志 ② journalctl -u 服务 -xe → 看详细报错找到文件和行号 ③ 找到行号去改配置 ④ nginx -t或服务自带的语法检查→ 验证语法 ⑤ reload 或 restart原则说明先看状态再动手别一上来就 restart先搞清楚发生了什么永远不要跳过第 ④ 步不测语法就重启起不来还得回滚改配置前先备份cp 原文件 /tmp/xxx.bak一分钟的事优先 reload 而非 restartreload 失败旧进程还在跑restart 失败服务直接挂十一、命令速查表命令作用systemctl start 服务启动服务systemctl stop 服务停止服务systemctl restart 服务重启PID 变、连接断systemctl reload 服务重读配置PID 不变、连接不断systemctl enable 服务设为开机自启systemctl disable 服务取消开机自启systemctl enable --now 服务设自启 立即启动systemctl status 服务详细状态 最近日志q退出systemctl is-active 服务只输出active/inactivesystemctl is-enabled 服务只输出enabled/disabledsystemctl show 服务 -p MainPID查主进程 PID验证 reload/restartjournalctl -u 服务 -f实时滚动某服务日志CtrlC退出journalctl -u 服务 -xe看最近详细报错红色的就是错误journalctl -u 服务 --since 1 hour ago按时间段捞日志journalctl -u 服务 --no-pager | grep 关键词日志二次过滤nginx -t检查 nginx 配置语法十二、常见问题排查现象原因与处理status显示inactive (dead)服务没启动 →systemctl start 服务status显示failed服务启动失败 →看status里的红色行 journalctl -u 服务 -xe改了配置但没生效忘了reload/restart注意改配置不会自动生效reload报错但服务还在跑说明配置有语法错误先nginx -t定位别急着重启restart后服务起不来了配置语法错误 →journalctl -xe找行号 → 改回 → 用备份还原开机后服务没自动起没enable用systemctl is-enabled确认journalctl卡在翻页模式没法配合管道加--no-pagerjournalctl提示没权限 / 日志不全加sudo另外 Ubuntu 默认 journal 占用磁盘有上限过老的日志会被清理想清空日志释放空间sudo journalctl --vacuum-time7d只保留 7 天curl: command not found先sudo apt install -y curl十三、本篇小结能力命令启停服务start/stop/restart/reload看状态status/is-active开机自启enable/disable/enable --now实时日志journalctl -u 服务 -f定位报错journalctl -u 服务 -xe时间筛选--since/--until二次过滤--no-pager | grep配置校验nginx -t两条最重要的认知enable和start是两件事—— 一个管下次开机一个管现在。改配置的流程永远是备份 → 改 → 语法检查 → reload—— 跳过语法检查就是给自己埋雷。到这里服务控制和日志排查就练通了。下一个模块Nginx 静态站点把这个一直在用的 nginx 真正配成一个网站。相关链接模块 1WSL 环境适配与 systemd 启用模块 2目录结构与核心文件操作模块 3用户与文件权限管理