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

windows服务器下自启动后台运行python脚本

前言

最近有个需求,在windows下根据系统的cpu核数,运行python脚本,记录下在windows注册服务,后台运行python脚本

目录

    • 前言
    • ✅ 一、目录结构(示例)
    • ✅ 二、manager.py(启动与 CPU 数相同的子进程,并写日志)
    • ✅ 三、supervisor.py(守护 manager.py)
    • ✅ 四、安装 NSSM 为系统服务(建议)
    • ✅ 五、服务控制命令
    • 📝 可选:一键注册服务 `.bat` 示例(register\_service.bat)
    • ✅ 总结

✅ 一、目录结构(示例)

C:\workspace\
│
├── manager.py        # 管理 CPU 核数子进程
├── supervisor.py     # 守护 manager.py
├── logs\
│   └── manager-1.log, manager-2.log ...
├── 

✅ 二、manager.py(启动与 CPU 数相同的子进程,并写日志)

import multiprocessing
import subprocess
import time
import sys
import os
from threading import Threaddef run_worker(python_exe, script_path, idx):log_path = f"./logs/manager-{idx}.log"os.makedirs(os.path.dirname(log_path), exist_ok=True)while True:with open(log_path, "a", encoding="utf-8") as f:print(f"[Worker-{idx}] Starting process...")try:p = subprocess.Popen([python_exe, script_path],stdout=f,stderr=subprocess.STDOUT)p.wait()print(f"[Worker-{idx}] Process exited with code {p.returncode}")except Exception as e:f.write(f"[Worker-{idx}] Error: {e}\n")f.write(f"[Worker-{idx}] Restarting in 2 seconds...\n")time.sleep(2)def main():cpu_count = multiprocessing.cpu_count()print(f"CPU cores detected: {cpu_count}")python_exe = r"C:\python.exe"script_path = r"C:\workspace\webunlock.py"workers = []for i in range(cpu_count):t = Thread(target=run_worker, args=(python_exe, script_path, i + 1), daemon=True)t.start()workers.append(t)try:while True:time.sleep(10)except KeyboardInterrupt:print("Manager exiting...")if __name__ == "__main__":main()

✅ 三、supervisor.py(守护 manager.py)

import subprocess
import time
import osMANAGER_SCRIPT = r"C:\workspace\manager.py"
PYTHON_EXE = r"C:\python.exe"def run_manager():log_path = r"C:\workspace\supervisor.log"os.makedirs(os.path.dirname(log_path), exist_ok=True)while True:with open(log_path, "a", encoding="utf-8") as f:try:print("Starting manager.py ...")p = subprocess.Popen([PYTHON_EXE, MANAGER_SCRIPT], stdout=f, stderr=subprocess.STDOUT)p.wait()f.write(f"[Supervisor] manager.py exited with code {p.returncode}\n")except Exception as e:f.write(f"[Supervisor] Error: {e}\n")f.write("[Supervisor] Restarting manager.py in 5 seconds...\n")time.sleep(5)if __name__ == "__main__":run_manager()

✅ 四、安装 NSSM 为系统服务(建议)

  1. 下载 NSSM:
    官网:https://nssm.cc/download

  2. 解压,命令行打开 NSSM 目录,运行:

nssm install Supervisor
  1. 在弹窗中配置:
  • Path: C:\python.exe
  • Arguments: supervisor.py
  • Startup Directory: C:\workspace
  1. 点击 “Install service”

  2. 启动服务:

nssm start Supervisor

✅ 五、服务控制命令

nssm start Supervisor
nssm stop Supervisor
nssm restart Supervisor

📝 可选:一键注册服务 .bat 示例(register_service.bat)

@echo off
set PYTHON_EXE=C:\python.exe
set SUPERVISOR_PATH=C:\supervisor.py
set WORK_DIR=C:\workspace\nssm install Supervisor %PYTHON_EXE% %SUPERVISOR_PATH%
nssm set Supervisor AppDirectory %WORK_DIR%
nssm start Supervisorecho Service Supervisor installed and started.
pause

✅ 总结

目标已解决方式
启动 N 个子进程manager.py 自动读取 CPU 数
异常自动重启每个进程/manager 均守护重启
开机启动使用 NSSM 注册为系统服务
日志记录日志按进程编号保存到 logs 目录
http://www.xdnf.cn/news/6754.html

相关文章:

  • 从微积分到集合论(1630-1910)(历史简介)——第1章——积分技巧(1630-1660)(Kirsti Møller Pedersen)
  • 一款强大的压测带宽工具-iperf3
  • FC7300 WDG MCAL 配置引导
  • 路桥塌陷感知监测预警系统解决方案
  • 服务图层自定义参数customParameters使用(Arcgis API for js)
  • 命令拼接符
  • MySQL锁机制详解与加锁流程全解析
  • sychronized原理(嚼碎了喂版)
  • 代码随想录算法训练营第三十八天打卡
  • 数据预处理-数据清洗(缺失值、重复值、异常值)
  • AUTOSAR图解==>AUTOSAR_SWS_ICUDriver
  • 龙虎榜——20250516
  • WHAT - SSR vs SSG vs ISR
  • STL学习
  • python报错:使用json.dumps()时,报错type xxx is not json serializable错误原因及解决方案
  • 反转链表链表数据结构oj题(206)
  • Spring MVC 中请求处理流程及核心组件解析
  • 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 解题报告 | 珂学家
  • React中useMemo和useCallback的作用:
  • 人工智能-状态空间-猴子摘香蕉
  • 从零实现一个高并发内存池 - 4
  • 中级网络工程师知识点3
  • 城市排水管网流量监测系统解决方案
  • HC32L190 串口驱动
  • [ linux-系统 ] 命令行参数 | 环境变量
  • 数据库--向量化基础
  • C++跨平台开发:突破不同平台的技术密码
  • 从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
  • 增量学习:机器学习领域中的资源高效利用秘籍
  • HTTPS 加密原理