Files
StudyDiary/02-学习笔记/在 __飞牛OS(或其他 Linux 系统)__ 中systemctl.md
2026-07-23 20:36:13 +08:00

5.2 KiB
Raw Permalink Blame History

title, created, source, tags
title created source tags
在 __飞牛OS(或其他 Linux 系统)__ 中 2026-07-02 Cherry Studio

飞牛OS(或其他 Linux 系统) 中,如果某个 服务进程 需要在启动时依赖其他前置服务(如数据库、网络等),可以通过以下方法找到并配置这些依赖关系:


1. 查看现有服务的依赖(systemd 方式)

飞牛OS 通常基于 systemd 管理服务,可以通过以下命令查看服务的依赖关系:

方法 1:使用 systemctl list-dependencies

# 查看某个服务的依赖树(例如 nginx)
systemctl list-dependencies nginx.service

输出示例:

nginx.service
● ├─system.slice
● ├─basic.target
● │ ├─paths.target
● │ ├─sockets.target
● │ ├─sysinit.target
● │ └─timers.target
● └─network-online.target
  • network-online.target 表示 nginx 依赖网络就绪后才启动。

方法 2:使用 systemctl show

# 查看服务的详细依赖信息(包括 Before/After/Wants/Requires
systemctl show nginx.service --property="Requires,Wants,After,Before"

输出示例:

Requires=basic.target
Wants=network-online.target
After=network.target basic.target
Before=multi-user.target
  • Requires:强依赖(如果该服务启动失败,当前服务也会失败)。

  • Wants:弱依赖(即使依赖服务失败,当前服务仍会尝试启动)。

  • After:确保该服务在 network.target 之后启动。

  • Before:确保该服务在 multi-user.target 之前启动。


2. 分析日志排查启动顺序

如果服务启动异常(如依赖未满足),可以查看 systemd 日志:

# 查看所有服务的启动日志(按时间排序)
journalctl -b

# 仅查看某个服务的日志(如 mysql)
journalctl -u mysql.service -b

示例问题:

nginx.service: Failed with result 'dependency'.
  • 这表明 nginx 因依赖项未满足而启动失败。

3. 手动设置服务依赖(修改 .service 文件)

如果发现某个服务 缺少依赖(如 app.service 需要在 mysql.service 之后启动):

步骤 1:编辑服务文件

sudo nano /etc/systemd/system/app.service

步骤 2:添加依赖关系

[Unit] 部分修改或添加:

[Unit]
Description=My Application
Requires=mysql.service    # 强依赖 MySQL
After=mysql.service       # 确保 MySQL 启动后再启动本服务

步骤 3:重载配置并重启

sudo systemctl daemon-reload
sudo systemctl restart app.service
sudo systemctl status app.service  # 检查状态

4. 特殊依赖管理(如 network-online.target

某些服务需要 网络完全就绪 后才启动(否则可能因 DNS/路由未生效而失败):

[Unit]
Description=My Web Service
After=network-online.target  # 确保网络完全可用(而不仅是 network.target
Wants=network-online.target  # 弱依赖网络
Requires=mysql.service       # 强依赖 MySQL

5. 图形化管理(飞牛OS 可能适用)

如果飞牛OS 提供 任务计划或服务管理 GUI,可以:

  1. 进入 控制面板 → 服务管理(或类似路径)。

  2. 查找目标服务(如 Web Server),检查其 依赖项启动顺序

  3. 手动调整启动优先级(类似 systemdBefore/After)。


6. 案例:分析飞牛OS 内置服务

示例:飞牛NAS 的 Samba 服务依赖

# 查看 Samba 的依赖项
systemctl show smbd.service --property="After,Requires"

可能输出:

After=network.target nmbd.service
Requires=nmbd.service
  • 说明 smbd 依赖 nmbdNetBIOS 服务)和网络(network.target)先启动。

解决方案:

如果想 自定义前置任务(如挂载存储后再启动 Samba):

[Unit]
Description=My Custom Samba Service
After=network.target storage-mount.service  # 新增存储挂载依赖
Requires=nmbd.service storage-mount.service # 强依赖存储挂载

总结

问题 排查方法 解决方案
服务启动失败,提示依赖缺失 systemctl list-dependencies 修改 .service 文件的 After/Requires
需要等待网络完全就绪 After=network-online.target 添加 network-online.target 依赖
服务启动顺序不符合预期 journalctl -b -u 服务名 调整 Before/After 顺序或依赖链
飞牛OS GUI 管理依赖 控制面板 → 任务计划 手动调整启动顺序或添加触发脚本

关键命令备忘:

systemctl list-dependencies <服务名>        # 查看依赖树
systemctl show <服务名> --property=After    # 查看 After 依赖
sudo systemctl edit <服务名>                # 临时修改服务配置
journalctl -b -u <服务名>                   # 查看启动日志

这样就能精准定位并管理飞牛OS 中的 服务依赖关系,避免因启动顺序问题导致服务异常!