2025年10月

以下是 3种实用方法+Python脚本,可直接查看Linux系统中特定服务的运行状态(适配Ubuntu等主流发行版):

一、核心命令(快速执行)

1. systemctl 命令(主流推荐,适用于 systemd 系统)

bash

格式:systemctl status [服务名]

systemctl status pulseaudio # 示例:查看音频服务
systemctl status nginx # 示例:查看Nginx服务
 

  • 输出包含 运行状态(active/inactive)、PID、日志片段,红色  inactive  表示停止,绿色  active (running)  表示运行中。

2. service 命令(兼容旧系统,如 sysvinit)

bash

格式:service [服务名] status

service mysql status # 示例:查看MySQL服务

  1. ps 命令(直接查找进程,无服务名时可用)

bash

格式:ps -ef | grep [服务关键词]

ps -ef | grep pulseaudio # 示例:查找音频服务进程
ps -ef | grep python # 示例:查找Python相关进程
 

  • 有输出结果且包含  pulseaudio (非  grep  自身),说明服务正在运行。

二、Python 脚本(批量检测/自动化场景)

以下是优化后的 Linux 服务状态检测脚本,支持单服务精准查询、多服务批量检测,输出清晰且包含进程详情,可直接运行:

python

!/usr/bin/env python3

import subprocess
import sys
from typing import Tuple, Optional

def run_system_command(cmd: list) -> Tuple[int, str, str]:

"""执行系统命令,返回状态码、stdout、stderr"""
try:
    result = subprocess.run(
        cmd, capture_output=True, text=True, timeout=10
    )
    return result.returncode, result.stdout.strip(), result.stderr.strip()
except subprocess.TimeoutExpired:
    return 124, "", "命令执行超时"
except Exception as e:
    return 125, "", f"命令执行失败:{str(e)}"

def get_service_status(service_name: str) -> dict:

"""获取单个服务的详细状态(基于 systemctl)"""
status_data = {
    "service": service_name,
    "is_running": False,
    "status": "unknown",
    "pid": None,
    "description": "",
    "error": ""
}

# 1. 优先使用 systemctl 检测(主流 systemd 系统)
code, stdout, stderr = run_system_command(["systemctl", "status", service_name])
if code == 0:
    # 解析运行状态(active/inactive/failed)
    for line in stdout.split("\n"):
        line = line.strip()
        if line.startswith("Active:"):
            status_data["status"] = line.split(";", 1)[1].strip() if ";" in line else line.split()[1]
            status_data["is_running"] = "active (running)" in line
        elif line.startswith("Main PID:") and " " in line:
            status_data["pid"] = line.split()[2]
        elif line.startswith("Description:"):
            status_data["description"] = line.split(":", 1)[1].strip()
elif "Unit {} not found".format(service_name) in stderr:
    # 服务不存在,尝试用 ps 查找进程(非系统服务适用)
    code_ps, stdout_ps, _ = run_system_command(["ps", "-ef", "|", "grep", "-v", "grep", "|", "grep", service_name])
    if code_ps == 0 and stdout_ps:
        status_data["is_running"] = True
        status_data["status"] = "process running (not systemd service)"
        # 提取第一个匹配进程的 PID
        status_data["pid"] = stdout_ps.split()[1]
    else:
        status_data["error"] = "服务/进程不存在"
else:
    status_data["error"] = stderr or "未知错误"

return status_data

def print_service_status(status_data: dict) -> None:

"""格式化输出服务状态"""
service = status_data["service"]
print(f"\n=== 服务状态:{service} ===")
if status_data["error"]:
    print(f"❌ 错误:{status_data['error']}")
    return

print(f"📊 运行状态:{'✅ 正在运行' if status_data['is_running'] else '❌ 已停止'}")
print(f"🔍 详细状态:{status_data['status']}")
if status_data["pid"]:
    print(f"🆔 PID:{status_data['pid']}")
if status_data["description"]:
    print(f"ℹ️  描述:{status_data['description']}")

def main():

# 检查参数(必须传入服务名)
if len(sys.argv) < 2:
    print("用法:")
    print(f"  单服务查询:{sys.argv[0]} <服务名>")
    print(f"  多服务查询:{sys.argv[0]} <服务1> <服务2> ...")
    print("示例:")
    print(f"  {sys.argv[0]} pulseaudio nginx mysql")
    sys.exit(1)

# 批量检测传入的所有服务
service_names = sys.argv[1:]
for service in service_names:
    status = get_service_status(service)
    print_service_status(status)

print("\n=== 检测完成 ===")

if name == "__main__":

main()

 

使用方法:

1. 保存脚本为  check_service.py 
2. 赋予执行权限: chmod +x check_service.py 
3. 运行示例:
bash

单服务查询(如音频服务)

./check_service.py pulseaudio

多服务批量查询(如音频、Nginx、MySQL)

./check_service.py pulseaudio nginx mysql
 

核心功能:

  • 自动兼容  systemd  服务和普通进程(如自定义 Python 服务)
  • 输出包含「运行状态、PID、服务描述」等关键信息
  • 支持多服务批量检测,适合自动化监控场景
  • 错误提示清晰(如「服务不存在」「执行超时」)

需要添加「服务启动/停止控制」或「日志导出」功能吗?我可以帮你快速扩展脚本。

在CentOS 7中查看防火墙状态,核心是通过命令行操作 firewalld (系统默认防火墙服务),最常用的命令为:

  • 查看防火墙当前运行状态: 

    systemctl status firewalld 

  • 输出中若显示“active (running) ”,表示防火墙已开启;若显示“inactive (dead) ”,则表示已关闭。
  • 快速判断防火墙是否开启: 

    firewall-cmd --state

 

  • 直接返回“running ”(开启)或“not running ”(关闭),结果更简洁。

需要我进一步说明如何开启、关闭或重启CentOS 7的防火墙吗?这样你可以在查看状态后直接进行后续操作。

在不同系统中查看防火墙允许的端口列表,核心命令因默认防火墙工具不同而有差异,以下是最常用的两种系统操作:

  1. CentOS/RHEL 7/8(默认 firewalld)
  • 查看所有允许的端口(包括永久和临时规则):
     

    firewall-cmd --list-ports 

示例输出: 80/tcp 3306/tcp 5901/udp ,直接显示允许的端口及协议。

  • 查看永久生效的允许端口(需加  --permanent  参数):
     

    firewall-cmd --permanent --list-ports 

  1. Ubuntu/Debian(默认 ufw)
  • 查看防火墙状态及允许的端口规则:
     

    ufw status

  或  

ufw status numbered

 (带规则编号,更清晰)
示例输出: 80/tcp ALLOW Anywhere ,明确显示允许的端口、协议及来源。

需要我针对你正在使用的系统(比如之前提到的 CentOS 7),进一步说明如何添加或删除允许的端口规则吗?

Open WebUI 是目前最流行、功能最丰富的本地大模型 Web 界面之一,它将 Ollama(或其他兼容 API)的服务封装成一个类似 ChatGPT 的用户界面,极大地提高了本地使用大模型的体验。

一、 Open WebUI 的安装

Open WebUI 的安装方式有多种,其中最推荐和最常用的是使用 Docker 和 Python/Pip。

前提条件
已安装 Ollama 并确保其正在后台运行(默认监听端口为 11434)。

已安装 Docker (推荐方式) 或 Python 3.11/3.12 (Python 方式)。

方式一:使用 Docker (推荐,最简单快捷)

这是最稳定的安装方式,它将 Open WebUI 隔离在一个容器中,避免了依赖冲突。

运行 Docker 命令: 在命令行(Terminal 或 PowerShell)中运行以下命令。

对于没有 GPU 的环境 (CPU 或集成显卡):

Bash

docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
对于带有 NVIDIA GPU 的环境 (需要先安装 NVIDIA Container Toolkit):

Bash

docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
注意:

--add-host=host.docker.internal:host-gateway 确保容器内的 WebUI 能正确连接到运行在宿主机(你的电脑)上的 Ollama 服务。

-p 3000:8080 表示通过你电脑的 3000 端口访问 WebUI。

访问 WebUI: 打开你的浏览器,访问地址:http://localhost:3000

方式二:使用 Python/Pip (无需 Docker)

如果你不想使用 Docker,可以直接通过 Python 包管理器安装。

安装 Open WebUI:

Bash

pip install open-webui
启动服务:

Bash

open-webui serve
访问 WebUI: 打开你的浏览器,访问地址:http://localhost:8080

二、 Open WebUI 的首次配置与使用

1. 首次登录与账户创建

第一次访问 http://localhost:3000http://localhost:8080 时,系统会要求你创建一个本地用户账户(用户名、邮箱和密码)。

这个账户是本地的,用于管理你的聊天记录、设置等。

2. Ollama 连接 (通常是自动的)

如果你是按照上述 Docker 或 Python 步骤安装的,Open WebUI 会自动尝试连接到你本地运行的 Ollama 服务 (默认地址 http://localhost:11434)。

如果连接失败或 Ollama 运行在其他地方:

登录后,点击左下角的用户头像,进入 Admin Settings (管理设置)。

导航到 Connections (连接) 区域,找到 Ollama。

确保 Ollama API URL 被正确设置为 Ollama 服务实际运行的地址和端口 (例如:http://10.0.2.2:11434http://host.docker.internal:11434 或你自定义的地址)。

3. 模型管理与下载

下载模型:

进入 Admin Settings (管理设置) -> Connections (连接) -> Ollama -> Manage (管理)。

在这里,你可以查看本地已安装的模型,也可以输入模型名称(如 llama3:8b)来直接下载和安装 Ollama 仓库中的模型。

快捷方式: 在聊天界面的模型选择下拉框中,直接输入你想要的模型名称,如果本地没有,WebUI 会提示你下载。

一、下载olama

项目地址:https://github.com/ollama/ollama
widows下载安装包:https://ollama.com/

安装完olama模型之后,给olama一个运行界面

1、可以使用open-webui来为olama提供一个访问界面
2、如果你想要一个可视化的运行界面,通常有以下几种主流的方式:

使用第三方 Web UI (推荐) 这是目前最流行和推荐的方式。社区开发了许多优秀的 Web 界面,你可以安装它们来管理模型、进行聊天等。其中最著名和常用的一个例子是:

Ollama Web UI (通常在 GitHub 上搜索 ollama-webui 就能找到)。

功能: 提供聊天界面、模型管理、聊天记录、多模型切换等功能。

安装: 通常通过 Docker 或直接安装脚本来部署。

使用桌面客户端 一些开发者将 Ollama 的功能集成到了桌面应用程序中,使其更方便使用。

例如,一些项目可能会提供 macOS、Windows 或 Linux 的桌面应用,集成了 Ollama 的服务和聊天界面。你可以搜索 Ollama desktop application 或 Ollama GUI 来寻找。

集成到其他应用程序 如果你在使用像 Jan、LM Studio 或其他一些本地 AI 聊天工具,它们可能支持连接到本地运行的 Ollama 服务,并将其作为模型来源。

总结步骤:

确保 Ollama 服务正在后台运行 (这是使用任何界面的前提)。

选择并安装一个 Web UI (如 Ollama Web UI) 或桌面客户端。

配置 Web UI/客户端,让它连接到你本地 Ollama 默认监听的地址和端口 (通常是 http://localhost:11434)。

提示: 对于新手用户,Ollama Web UI 是一个很好的起点,因为它功能强大且社区活跃。

在本地搭建一个生成“数字人”(通常指可以说话、动嘴、甚至有表情的虚拟人物视频)的项目,主要涉及到“会说话的头像生成”(Talking Face Generation)技术。

最常见和成熟的本地开源方案是基于 深度学习模型,如 Wav2Lip 及其衍生项目。

以下是本地搭建一个基本数字人项目的通用步骤和所需的关键技术栈:

方案:基于 Wav2Lip 或类似项目

Wav2Lip 是一个非常流行的开源项目,它能将任意人脸视频和一段音频结合,生成一个嘴型与音频同步的新视频。

关键技术栈
编程语言: Python (必需)

深度学习框架: PyTorch 或 TensorFlow

环境管理: Conda 或 venv (强烈推荐)

硬件要求: 最好有一块 NVIDIA 独立显卡 (GPU),因为深度学习模型的推理速度在 GPU 上会快很多。

本地搭建步骤

步骤 1: 准备开发环境

安装 Python: 确保安装了 Python 3.6 - 3.9 版本(具体版本取决于你选择的开源项目要求)。

安装 Conda 或创建虚拟环境:

Bash

使用 Conda 创建环境(推荐)
conda create -n digital_human python=3.8
conda activate digital_human
安装 PyTorch/TensorFlow: 根据你的 GPU 类型和操作系统,安装对应版本的深度学习框架,并确保它能使用 GPU (如果需要)。

步骤 2: 下载开源项目代码

克隆代码仓库: 以 Wav2Lip 为例,你需要找到它的 GitHub 仓库并克隆到本地。

Bash

git clone [项目GitHub地址]
cd [项目文件夹]
安装依赖: 进入项目文件夹,安装 requirements.txt 中列出的所有依赖库。

Bash

pip install -r requirements.txt

步骤 3: 下载预训练模型权重

下载模型文件: 深度学习项目通常需要预训练的权重文件(.pth 或 .pt),这些文件通常很大。项目 README 中会提供下载链接(如 Google Drive 或 Baidu Netdisk)。

放置文件: 将下载的权重文件(例如 wav2lip.pth)放置到项目指定的目录下(通常是 checkpoints 或 models 文件夹)。

步骤 4: 准备素材

你需要准备两样东西:

视频 (Video): 包含目标数字人脸部的视频文件(例如 input_face.mp4)。

音频 (Audio): 包含你希望数字人说的内容的音频文件(例如 input_audio.wav 或 input_audio.mp3)。

步骤 5: 运行生成脚本

运行推理命令: 项目通常会提供一个 Python 脚本(例如 inference.py 或 generate.py)来执行生成任务。你需要传递输入视频、音频和输出文件的路径。

一个典型的命令可能如下所示:

Bash

python inference.py --face "path/to/input_face.mp4" --audio "path/to/input_audio.wav" --outfile "path/to/output_video.mp4"
等待生成: 程序会加载模型,处理视频帧,并生成嘴型同步的新视频文件。

其他进阶方向(非 Wav2Lip)

如果你想生成更复杂的数字人(例如可以控制头部姿态、肢体动作或全身模型),你可能需要探索以下技术方向:

全身数字人: 涉及 3D 建模、骨骼绑定(Rigging)和动作捕捉(Motion Capture)数据。通常需要使用 Blender、Unity 或 Unreal Engine 等专业工具。

高精度肖像生成: 结合 StyleGAN 或 Stable Diffusion 等扩散模型生成逼真的静态人脸,再用 Wav2Lip 等技术使其说话。

NeRF (神经辐射场): 用于生成特定场景下的高逼真度 3D 模型和视图,但计算资源要求极高。