本文目录导读:

获取服务依赖关系的方法取决于你的操作系统,以下是常见的脚本方案:
Windows 系统
PowerShell 脚本
# 获取所有服务及其依赖关系
Get-Service | Select-Object Name, DisplayName, DependentServices, ServicesDependedOn |
Format-Table -AutoSize
# 导出到 CSV 文件
Get-Service | Select-Object Name, DisplayName, @{Name="DependsOn";Expression={($_.ServicesDependedOn | ForEach-Object {$_.Name}) -join "; "}}, @{Name="DependentServices";Expression={($_.DependentServices | ForEach-Object {$_.Name}) -join "; "}} | Export-Csv "service_dependencies.csv" -NoTypeInformation
# 查询特定服务的依赖
$serviceName = "W3SVC" # 替换为你要查询的服务名
Get-Service -Name $serviceName | Select-Object Name, DisplayName, DependentServices, ServicesDependedOn
CMD 批处理脚本
@echo off REM 列出所有服务及其依赖 sc query type= service state= all | findstr /i "SERVICE_NAME DISPLAY_NAME" REM 查看特定服务的依赖关系 set SERVICE_NAME=W3SVC sc qc %SERVICE_NAME% REM 查看依赖该服务的其他服务 sc enumdepend %SERVICE_NAME%
Linux 系统
Systemd 系统 (CentOS 7+, Ubuntu 16.04+, Debian 8+)
#!/bin/bash # 获取所有服务依赖关系的 Bash 脚本 # 查看所有服务的依赖关系 systemctl list-dependencies --all # 查看特定服务依赖 SERVICE_NAME="nginx" systemctl list-dependencies $SERVICE_NAME # 查看反向依赖 (谁依赖该服务) systemctl list-dependencies --reverse $SERVICE_NAME # 导出到文件 systemctl list-dependencies --all > service_deps.txt # 更详细的依赖关系 systemctl show -p Requires,Wants,Conflicts $SERVICE_NAME
SysV Init 系统 (较老的 Linux)
#!/bin/bash # SysV 系统的依赖检查 chkconfig --list # 查看特定服务的运行级别和依赖 chkconfig --list | grep "3:on"
递归获取所有依赖 (Python 脚本)
#!/usr/bin/env python3
import subprocess
import json
def get_service_deps(service_name, reverse=False):
"""获取服务的依赖关系"""
cmd = f"systemctl list-dependencies {'--reverse' if reverse else ''} {service_name}"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
deps = []
for line in result.stdout.split('\n'):
if '●' in line or '─' in line:
# 解析服务名称
parts = line.split()
for part in parts:
if part.endswith('.service') or part.endswith('.target'):
deps.append(part)
return deps
# 使用示例
service = "sshd"
print(f"{service} 依赖于:")
for dep in get_service_deps(service):
print(f" - {dep}")
print(f"\n依赖 {service} 的服务:")
for dep in get_service_deps(service, reverse=True):
print(f" - {dep}")
Docker 容器依赖
#!/bin/bash
# 获取 Docker 容器之间的依赖关系
# 查看 docker-compose 依赖
docker-compose config --services
# 查看容器网络连接
docker network inspect bridge
# 通过标签或环境变量获取依赖关系
docker ps --format "{{.Names}}: {{.Labels}}" | grep "com.docker.compose.depends_on"
跨平台解决方案 (Python)
#!/usr/bin/env python3
"""
跨平台服务依赖获取工具
"""
import platform
import subprocess
import re
def get_windows_deps():
"""Windows 服务依赖"""
import win32serviceutil # 需要安装 pywin32
import win32service
services = {}
hscm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ENUMERATE_SERVICE)
for service in win32service.EnumServicesStatus(hscm):
name = service[0]
handle = win32service.OpenService(hscm, name, win32service.SERVICE_QUERY_CONFIG)
config = win32service.QueryServiceConfig(handle)
services[name] = {
'name': name,
'display_name': config[1],
'dependencies': list(config[5]) if config[5] else []
}
return services
def get_linux_deps():
"""Linux 系统服务依赖"""
deps = {}
# 获取所有服务
result = subprocess.run(['systemctl', 'list-units', '--type=service', '--all'],
capture_output=True, text=True)
service_names = re.findall(r'([\w-]+\.service)', result.stdout)
for service in service_names:
deps[service] = {
'name': service,
'dependencies': get_service_deps(service, reverse=False),
'dependents': get_service_deps(service, reverse=True)
}
return deps
if __name__ == "__main__":
system = platform.system()
if system == "Windows":
deps = get_windows_deps()
elif system == "Linux":
deps = get_linux_deps()
else:
print(f"Unsupported OS: {system}")
exit(1)
# 输出为 JSON
print(json.dumps(deps, indent=2))
使用建议
- Windows 环境:优先使用 PowerShell,功能更强大
- Linux Systemd:直接使用
systemctl命令 - 批量处理:Python 脚本更灵活,支持跨平台
- 性能考虑:大规模系统建议导出到文件后再分析
选择哪种方案取决于你的操作系统和具体需求,如果只是临时查看,使用系统自带命令即可;如果需要自动化处理,Python 脚本更合适。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播