You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Microsoft服务器上安装并24小时不间断运行Python脚本

嘿,刚好我之前在Windows Server上部署过类似的Python长期运行脚本,给你几个靠谱的方案,一步步来,你可以根据自己的需求选:

方案1:注册为Windows服务(最推荐,系统级持久运行)

这种方式最稳定,服务是系统级别的,开机自动启动,崩溃了还能配置自动重启,完全符合24小时不间断的需求。

步骤如下:

  1. 先做好前置检查:确保服务器上装了Python,把你的校验脚本传到服务器上,手动跑一遍确认能正常运行(重点检查依赖库有没有装、文件路径是不是绝对路径——别用相对路径,服务运行的工作目录和你手动跑的不一样!)。
  2. 安装服务依赖库:打开管理员命令提示符,运行 pip install pywin32。
  3. 写一个服务包装脚本:比如命名为service_wrapper.py,把下面的代码复制进去,记得替换成你自己的脚本入口:
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import sys
import os
import time

# 导入你的校验脚本主模块,比如你的脚本叫validation_script.py,就写import validation_script
import validation_script

class ValidationService(win32serviceutil.ServiceFramework):
    # 服务名称(内部用)
    _svc_name_ = "DataValidationService"
    # 服务显示名称(在服务管理器里看到的名字)
    _svc_display_name_ = "数据校验后台服务"
    # 服务描述
    _svc_description_ = "24小时不间断运行Python数据校验脚本"

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
        socket.setdefaulttimeout(60)
        self.is_running = True

    def SvcStop(self):
        # 处理服务停止请求
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.is_running = False

    def SvcDoRun(self):
        # 服务启动时执行
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))
        self.main_loop()

    def main_loop(self):
        # 这里是你的脚本运行逻辑,如果是持续监听就一直循环,定时执行就加sleep
        while self.is_running:
            try:
                # 调用你脚本里的核心校验函数,比如validation_script.run_check()
                validation_script.run_check()
                # 比如每30分钟跑一次,根据你的需求调整间隔
                time.sleep(1800)
            except Exception as e:
                # 把错误日志写到文件里,方便排查
                log_path = os.path.join(os.path.dirname(__file__), 'service_error.log')
                with open(log_path, 'a', encoding='utf-8') as f:
                    f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - 错误信息: {str(e)}\n")
                # 出错后等1分钟再继续,避免死循环报错
                time.sleep(60)

if __name__ == '__main__':
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(ValidationService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        # 处理命令行参数(install/start/stop等)
        win32serviceutil.HandleCommandLine(ValidationService)
  1. 注册并启动服务:
    • 打开管理员命令提示符,切换到脚本所在目录,运行 python service_wrapper.py install
    • 启动服务:可以在「服务」管理器里找到「数据校验后台服务」右键启动;或者命令行运行 python service_wrapper.py start
    • 如果后续修改了脚本,先停服务 python service_wrapper.py stop,重新安装 python service_wrapper.py install,再启动即可。
方案2:用Windows任务计划程序(适合定时执行的场景)

如果你的脚本不需要一直运行,而是每隔一段时间执行一次(比如每小时校验一次),用任务计划程序更简单,不需要写包装脚本。

步骤:

  1. 前置检查:和上面一样,确保脚本手动运行正常,用绝对路径。
  2. 创建任务:
    • 打开「任务计划程序」,点击左侧「任务计划程序库」,然后点击右侧「创建基本任务」
    • 填写任务名称(比如「数据定时校验」),描述,点击下一步
    • 触发器选「每天」,然后设置重复间隔(比如每1小时重复一次,持续时间选「无限期」),点击下一步
    • 操作选「启动程序」,「程序或脚本」选Python的安装路径(比如C:\Python39\python.exe),「添加参数」填你的脚本绝对路径(比如C:\scripts\validation_script.py),「起始于」填脚本所在目录(比如C:\scripts),点击下一步
    • 勾选「当单击完成时,打开此任务属性的对话框」,点击完成
  3. 配置高级属性:
    • 在属性窗口切换到「设置」选项卡,勾选「如果任务失败,每隔X分钟重试」(比如5分钟),「允许任务在用户未登录时运行」(非常重要,这样服务器没人登录也能跑),如果服务器可能睡眠,再勾选「唤醒计算机运行此任务」
方案3:用NSSM工具(简单快捷,无需写服务包装脚本)

NSSM是一个第三方工具,能把任意程序包装成Windows服务,比写pywin32脚本简单很多,适合不想折腾代码的情况。

步骤:

  1. 下载NSSM:去官网下载对应服务器系统的版本(32/64位),解压到某个目录(比如C:\nssm),把这个目录加到系统环境变量PATH里(方便命令行调用)。
  2. 安装服务:
    • 打开管理员命令提示符,运行 nssm install DataValidationService,会弹出图形配置界面
    • 「Application」选项卡:
      • Path:选Python的exe路径(比如C:\Python39\python.exe)
      • Arguments:填你的脚本绝对路径(C:\scripts\validation_script.py)
      • Working Directory:填脚本所在目录(C:\scripts)
    • 「Recovery」选项卡:设置服务失败后的操作,比如「第一次失败:重启服务」,「第二次失败:重启服务」,「后续失败:重启服务」,重启间隔设为1分钟
    • 点击「Install service」完成安装
  3. 管理服务:可以在「服务」管理器里启动/停止,或者用命令行:nssm start DataValidationService、nssm stop DataValidationService
关键注意事项
  • 绝对路径!绝对路径!绝对路径! 脚本里所有涉及文件的地方(读取数据源、写日志、依赖文件)都要用绝对路径,不然服务运行时会找不到文件。
  • 加日志记录:一定要把脚本的运行情况、错误信息写到日志文件里,方便排查问题。推荐用Python的logging模块,比如:
import logging
from logging.handlers import RotatingFileHandler

def setup_logger():
    logger = logging.getLogger('validation_log')
    logger.setLevel(logging.INFO)
    # 日志文件最多存5个,每个10MB,自动切割
    handler = RotatingFileHandler(
        'C:\scripts\validation.log',
        maxBytes=10*1024*1024,
        backupCount=5,
        encoding='utf-8'
    )
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger

logger = setup_logger()
# 然后在脚本里用:
logger.info("数据校验开始执行")
logger.error(f"校验出错:{str(e)}")
  • 环境一致性:确保服务器的Python环境和你本地的一致,比如依赖库,你可以在本地运行pip freeze > requirements.txt,然后在服务器上运行pip install -r requirements.txt安装所有依赖。
  • 先测试再部署:先手动在服务器上跑一遍脚本,确认没有问题,再部署成服务或任务,避免一开始就出问题。

内容的提问来源于stack exchange,提问作者ilia rukhadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:31:00