当前位置: 首页 > article >正文

有两个Python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动?

环境:

SEMCP

searx.webapp

python

问题描述:

有两个python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动?

在这里插入图片描述

解决方案:

将这两个 Python 脚本打包成有启动顺序的系统服务,最常用的方法是在 Linux 系统上使用 systemd 来管理它们。将创建两个 systemd 服务单元文件,一个用于 searx.webapp,一个用于 SEMCP.py,并通过配置依赖关系确保 searx.webapp 先启动并运行稳定后,自动再启动 SEMCP.py

希望使用 root 用户运行(注意:在生产环境中通常不建议使用 root 用户运行服务,应创建专用用户以提高安全性)。

步骤 1: 创建 SearXNG Webapp 的 systemd 服务文件

创建一个名为 searxng-webapp.service 的文件,放在 /etc/systemd/system/ 目录下。

sudo nano /etc/systemd/system/searxng-webapp.service

将以下内容粘贴到文件中:

[Unit]
Description=SearXNG Web Application
After=network.target
Wants=semcp.service[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/mnt/program/Qwen3/searxng
# 修改 ExecStart 如下
ExecStart=/bin/bash -c '\source /root/miniconda/etc/profile.d/conda.sh && \conda activate qwen3_env && \exec python -m searx.webapp' # 注意这里激活环境后直接使用 python 命令即可
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target

保存并关闭文件。

步骤 2: 创建 SEMCP 脚本的 systemd 服务文件

创建一个名为 semcp.service 的文件,放在 /etc/systemd/system/ 目录下。

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

将以下内容粘贴到文件中:

[Unit]
Description=SearXNG SEMCP Service
After=network.target searxng-webapp.service # 假设它依赖 webapp[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/mnt/program/Qwen3/searxng/searx
# 修改 ExecStart 如下
ExecStart=/bin/bash -c '\source /root/miniconda/etc/profile.d/conda.sh && \conda activate qwen3_env && \exec python SEMCP.py' # 注意这里激活环境后直接使用 python 命令即可
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target

保存并关闭文件。

关键点解释:

  • [Unit] 部分定义了服务的元信息和依赖关系。
    • After=network.target network-online.targetRequires= (在 semcp.service 中) 指定了服务的启动顺序和依赖。semcp.service 中的 After=searxng-webapp.serviceRequires=searxng-webapp.service 明确告诉 systemd,semcp.service 必须在 searxng-webapp.service 启动 之后 才能启动,并且依赖于它的成功启动。
  • [Service] 部分定义了如何运行服务。
    • UserGroup 指定了运行服务的用户和组。请根据实际情况和安全需求修改。
    • WorkingDirectory 指定了脚本执行时所在的目录。这对于 searx.webapp 需要在 SearXNG 根目录运行,而 SEMCP.py 需要在其所在目录运行的情况非常重要。
    • ExecStart 指定了服务的启动命令。我们直接调用虚拟环境中的 python 解释器来执行相应的模块或脚本。
    • Restart=on-failure 会让 systemd 在脚本非正常退出时自动重启服务。
    • StandardOutput=syslogStandardError=syslog 将服务的输出信息发送到系统日志(可以通过 journalctl 查看),方便调试。
  • [Install] 部分定义了服务如何被 systemd 启用。
    • WantedBy=multi-user.target 意味着当系统进入多用户运行级别时,此服务会被启动。

步骤 3: 重新加载 systemd 配置

创建或修改服务文件后,需要让 systemd 重新加载配置:

sudo systemctl daemon-reload

步骤 4: 启用服务(设置开机自启)

如果您希望服务在系统启动时自动运行,需要启用它们:

sudo systemctl enable searxng-webapp.service
sudo systemctl enable semcp.service

由于 semcp.service 依赖于 searxng-webapp.service,启用 semcp.service 也会间接确保 searxng-webapp.service 在启动序列中。

步骤 5: 启动服务

现在可以手动启动服务了。启动 semcp.service 会因为依赖关系自动先启动 searxng-webapp.service

sudo systemctl start semcp.service
# 或者分开启动,先启动webapp,再启动semcp:
# sudo systemctl start searxng-webapp.service
# sudo systemctl start semcp.service

步骤 6: 检查服务状态和日志

检查服务是否正常运行:

sudo systemctl status searxng-webapp.service
sudo systemctl status semcp.service

查看服务的详细日志(用于调试):

sudo journalctl -u searxng-webapp.service -f # -f 参数可以实时跟踪日志
sudo journalctl -u semcp.service -f

在这里插入图片描述
重要提示:

  1. 路径准确性: 请务必检查 /mnt/program/Qwen3/qwen3_env/bin/python/mnt/program/Qwen3/searxng/mnt/program/Qwen3/searxng/searx/SEMCP.py 这些路径是否准确无误。
  2. 权限问题: 确保运行服务的用户(这里是 root)对虚拟环境目录、SearXNG 目录、SEMCP.py 脚本及其可能读写的任何文件或目录拥有读、写、执行权限。
  3. SearXNG 启动时间: After=searxng-webapp.service 只保证 searxng-webapp 的进程启动了,不保证它已经完全初始化并开始监听端口。如果 SEMCP.py 启动太快导致连接 SearXNG 失败,您可能需要在 semcp.service[Service] 部分添加 ExecStartPre=/bin/sleep 10 (等待10秒) 或者编写一个更复杂的健康检查脚本来确保 SearXNG 可用后再启动 SEMCP.py
  4. 安全性: 强烈建议为服务创建一个专用的低权限用户,而不是使用 root。

通过以上步骤,您就可以将两个 Python 脚本配置为由 systemd 管理的系统服务,并确保它们按照所需的顺序启动。

相关文章:

有两个Python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动?

环境: SEMCP searx.webapp python 问题描述: 有两个python脚本都在虚拟环境下运行,怎么打包成一个系统服务,按照顺序启动? 解决方案: 将这两个 Python 脚本打包成有启动顺序的系统服务,最…...

【Linux cmd】查找进程信息

1、包含 "Test" 关键字的进程 ps -ef | grep Test 显示系统中所有进程的详细信息,包括用户 ID(UID)、进程 ID(PID)、父进程 ID(PPID)、启动时间(STIME)、终端…...

与网格共舞 - 服务网格的运维与问题排查 (Istio 实例)

与网格共舞 - 服务网格的运维与问题排查 (Istio 实例) 在领略了服务网格(以 Istio 为例)在流量管理、可观测性和安全方面提供的强大能力后,我们自然会思考:如何将这个“神器”请进我们的生产环境,并让它稳定、可靠地运行?这需要我们关注运维层面的实践。 部署与升级:网…...

Python 脚本执行命令的深度探索:方法、示例与最佳实践

在现代软件开发过程中,Python 脚本常常需要与其他工具和命令进行交互,以实现自动化任务、跨工具数据处理等功能。Python 提供了多种方式来执行外部命令,并获取其输出,重定向到文件,而不是直接在终端中显示。这种能力使…...

PotPlayer 4K 本地万能影音播放器

今日分享一款来自吾爱论坛大佬分享的啥都能播的的本地播放器,不管是不管是普通视频、4K超清、蓝光3D,还是冷门格式,它基本都能搞定。而且运行流畅不卡顿,电脑配置低也能靠硬件加速,让你根本停不下来。 自带解码器&…...

2025年电工杯A题第一版本Q1-Q4详细思路求解+代码运行

A题 光伏电站发电功率日前预测问题 问题背景 光伏发电是通过半导体材料的光电效应,将太阳能直接转化为电能的技术。光伏电站是由众多光伏发电单元组成的规模化发电设施。 光伏电站的发电功率主要由光伏板表面接收到的太阳辐射总量决定,不同季节太阳光…...

基于阿里云DashScope API构建智能对话指南

背景 公司想对接AI智能体,用于客服系统,经过调研和实施,觉得DashScope 符合需求。 阿里云推出的DashScope灵积模型服务为开发者提供了便捷高效的大模型接入方案。本文将详细介绍如何基于DashScope API构建一个功能完善的智能对话系统&#x…...

HOW - 基于组件库组件改造成自定义组件基本规范

文章目录 Select 选择器改造1. 明确组件目标2. 定义组件 API3. 合理使用默认值4. 支持类型安全的 options 传递5. 支持 ForwardRef(可选)6. 封装样式(可选)7. 使用示例 ...props 位置推荐顺序:最后原因:简要…...

九州未来十三载:开源赋能 智启未来

2012年,九州未来以“开源赋能云边变革”为使命,开启中国开放云边基础架构服务的探索之路。十三载坚守深耕,我们始终以开源为翼,以算力为基,在科技浪潮中砥砺前行,见证并推动着AI时代的算力变革。 坚守初心丨…...

2025年AI搜索引擎发展洞察:技术革新与市场变革

引言:AI搜索的崛起与市场格局重塑 2024-2025年,AI搜索市场迎来了前所未有的变革期。随着DeepSeek-R1等先进大语言模型的推出,传统搜索引擎、AI原生搜索平台以及各类内容平台纷纷加速智能化转型,推动搜索技术从基础信息检索向深度…...

dify调用Streamable HTTP MCP应用

一、概述 上一篇文章,介绍了使用python开发Streamable HTTP MCP应用,链接:https://www.cnblogs.com/xiao987334176/p/18872195 接下来介绍dify如何调用MCP 二、插件 安装插件 需要安装2个插件,分别是:Agent 策略(支持 …...

HCIP实验五

一、实验拓扑图: 二、实验需求分析: 1. PreVal策略:要求确保R4通过R2到达192.168.10.0/24 ,需在R4上针对去往该网段路由配置PreVal策略,为经R2的路径赋予更高优先值,影响本地路由表选路。 2. AS Path策略…...

java将图片转Base64字符串存储mysql数据库

1、mysql数据库的表里新增一个字段image_data,使用TEXT或LONGTEXT类型: CREATE TABLE IMAGES( id INT AUTO_INCREMENT PRIMARY KEY, image_name VARCHAR(255), image_data LONGTEXT, upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 2、Java核心…...

题目 3330: 蓝桥杯2025年第十六届省赛真题-01 串

题目 3330: 蓝桥杯2025年第十六届省赛真题-01 串 时间限制: 2s 内存限制: 192MB 提交: 310 解决: 24 题目描述 给定一个由 0, 1, 2, 3 的二进制表示拼接而成的长度无限的 01 串。 其前若干位形如 011011100101110111 。 请求出这个串的前 x 位里有多少个 1 。 输入格…...

初识 Flask 框架

目录 1. Flask 框架概述 1.1 安装 Flask 1.2 创建你的第一个 Flask 应用 1.3 运行 Flask 应用 2. Flask 路由与视图函数 2.1 动态路由 2.2 支持多种 HTTP 请求方法 2.3 使用 Jinja2 模版渲染 HTML 2.5 模版继承与块 3. Flask 表单处理与用户输入 3.1 安装 Flask-WTF …...

MYSQL故障排查和环境优化

一、MySQL故障排查 1. 单实例常见故障 (1)连接失败类问题 ERROR 2002 (HY000): Cant connect to MySQL server 原因:MySQL未启动或端口被防火墙拦截。 解决:启动MySQL服务(systemctl start mysqld)或开放…...

vivado fpga程序固化

一般下载到fpga上的程序在掉电之后就会丢失,如果想要掉电之后程序不丢失,就需要将比特流文件固化到板载的flash上。 以下以我的7a100t开发板为例,介绍程序固化的流程 点击OK就可以下载了。 一个奇怪的问题 有一次我的一个工程固化之后&…...

OpenCV CUDA模块图像特征检测与描述------图像中快速检测特征点类cv::cuda::FastFeatureDetector

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::FastFeatureDetector 是 OpenCV 的 CUDA 加速模块中的一部分,用于在图像中快速检测特征点。FAST(Features fro…...

SpringMVC(结合源码浅析工作流程)

SpringMVC 概念 Spring MVC 是基于前端控制器(Front Controller)设计模式的 Web 框架,在 Web 应用中指一个统一的入口,用来接收所有客户端请求,并统一进行分发、处理。在 SpringMVC 中,前端控制器就是 Di…...

学习STC51单片机13(芯片为STC89C52RC)

我去,兄弟们我们今天来学习一个牛逼 的硬件,它叫超声波测距模块HC—SR04 硬件:HC—SR04 哎,想当初最想要玩的就是这个模块,科技感十足,那现在就让我们玩玩吧 超声波测距传感器 原理就是说需要给Trig 10u…...

Claude 4 系列 Opus 4 与 Sonnet 4正式发布:Claude 4新特性都有哪些?

随着 Claude 4 系列(Opus 4 与 Sonnet 4)的正式发布,Anthropic 把自家大模型从“会聊天”推进到“能当自主代理”──不仅推理更深、上下文更长,还内置代码执行、多模态理解、工具调用等一揽子全新能力;同时&#xff0…...

Swagger API 未授权访问漏洞【原理扫描】修复

一、背景 漏洞名称:Swagger API 未授权访问漏洞【原理扫描】 风险等级:中 详细描述: Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,方便开发者快速了解和调试接口。但由于…...

深度“求索”:DeepSeek+Dify构建个人知识库

目录 前言 环境部署 安装Docker 安装Dify 配置Dify 部署知识库 创建应用 前言 在当今数字化信息爆炸的时代,数据隐私和个性化知识管理成为企业和个人关注的焦点。Dify,作为一款备受瞩目的开源 AI 应用开发平台,为用户提供了完整的私有…...

基于R语言的空间异质性数据分析技术

在自然和社会科学领域,存在大量与地理或空间相关的数据,这些数据通常具有显著的空间异质性。传统的统计学方法在处理这类数据时往往力不从心。基于R语言的一系列空间异质性数据分析方法,如地理加权回归(GWR)、地理加权…...

C++:动态刷新打印内容

目录 1.简介1.1 Display类原理简述 2.代码2.1 main.cpp:无注释版2.2 main.cpp:有注释版 3.编译运行 1.简介 本文介绍一个用于命令行动态覆盖输出的C实现(Display类); 效果说明: 普通输出会直接换行显示。…...

网络学习-TCP协议(七)

一、TCP协议 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 1、三次握手 客户端: 1、先发起连接,发送SYN置1,seqnum12345(随机值)----半连接…...

基于微信小程序的高校校园微活动管理系统设计与实现(源码+定制+开发)高校微信小程序校园活动发布与互动平台开发 面向大学生群体的校园活动移动平台设计与实现

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

Python 项目中安装 OpenAI 库的详细指南

在 Windows 系统中指定版本安装 OpenAI 库的指南 在 Windows 系统中,尤其是使用 Python 3.7.8 时,安装 OpenAI 库可能会遇到一些问题。本文将为你提供一个简单易懂的解决方案,帮助你成功安装指定版本的 OpenAI 库。 一、问题背景 当你在 W…...

云计算与大数据进阶 | 27、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(上)

数据中心里,存储系统是至关重要的组成部分。由于相关硬件组件与存储操作系统的多样性和复杂性,如何在保证存储稳定、安全、可靠的同时,实现灵活扩展和自服务,一直是困扰数据中心全面云化的难题。 简单来说,现在的难题…...

使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)

建立向量嵌入数据库 from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain.docstore.document import Document from langchain_chroma.vectorstores import Chromaimport vertexai from…...