查看 Debian 中服务启动顺序的实用方法
一、快速方法 当前启动的服务先后顺序
- 使用 systemd 的日志按时间排序,直接列出本次启动中所有服务的启动记录,并按时间正序展示:
- 命令:sudo journalctl -b --type=service --state=started --no-pager
- 说明:
- -b 仅查看本次启动(boot)的日志;
- –type=service 仅显示服务单元;
- –state=started 仅保留“已启动”事件;
- 输出默认按时间正序,首条即最早启动的服务,末条为最晚。若更关注“谁最后完成”,可加 -r 反转顺序查看。
二、按时间线排查两个服务的先后关系
- 对比两个服务的“启动完成”时间戳,判断谁先谁后:
- 命令:
- sudo journalctl -u nginx.service -b --no-pager | grep ‘Started’
- sudo journalctl -u postgresql.service -b --no-pager | grep ‘Started’
- 解读:比较两条“Started …”日志的时间戳即可确定先后。也可用一条命令直接输出带时间的启动行:
- sudo journalctl -b --type=service --state=started -o short-iso | grep -E ‘nginx|postgresql’
- 提示:若服务由 Type=oneshot 或 ExecStartPre/ExecStartPost 分阶段执行,建议同时查看“Stopped/Failed”等状态以完整还原时序。
三、查看历史启动中各次启动的服务顺序
- 列出多次启动的概览,再进入某一次启动查看顺序:
- 列出引导概览:sudo journalctl --list-boots
- 进入指定引导(例如第 1 次):sudo journalctl -b -1 --type=service --state=started --no-pager
- 说明:–list-boots 显示每次引导的时间与 ID;-b N 切换到对应引导,随后按前述方法查看该次启动的服务启动顺序。
四、没有 journal 或 syslog 时的替代与补充
- 传统 syslog 文件检索:
- 查看本次启动相关日志:grep ‘started|stopped’ /var/log/syslog
- 按服务名过滤:grep ‘nginx’ /var/log/syslog
- 实时跟踪:tail -f /var/log/syslog
- 说明:部分系统可能使用 /var/log/messages 或分应用日志目录(如 /var/log/apache2/)。若系统使用 rsyslog 且配置了按服务分文件,可直接查看对应文件。