介绍
最近有个需求,需要在Windows环境部署一个Celery任务。为了让程序稳定运行,对外提供服务,需要以守护进程方式运行Celery任务。之前的项目都是运行在Linux环境,Celery任务也都是用Supervisor管理进程的,但是Supervisor不支持Windows环境,因此研究了Windows环境下以守护进程方式运行Celery的几种实现方案。
一番Google之后,了解到有以下4种方案:
NSSM
NSSM是Windows环境下一款免安装的服务管理软件,它可以将应用封装成服务,使之像windows服务可以设置自动启动等。并且可以监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能。不仅支持图形界面操作,也完全支持命令行设置。
推荐,本文就采用的这种方案
更多NSSM介绍及相关用法请参考NSSM介绍
Forever
Forever 是一种简单的命令行界面工具,用于确保特定脚本持续(永久)运行。Forever 的简单界面使其成为运行 Node.js 应用程序和脚本的较小部署的理想选择。
经过一番折腾后,发现forever可以管理直接运行的Python脚本,但是运行celery worker时,无法设置复杂的参数。
Task Scheduler
Windows自带的计划任务,celery 官网有提到这种方案Windows Tip: Run applications in the background using Task Scheduler,但是尝试未果。
自己写Python守护进程脚本
由于时间关系,此方案未尝试,有兴趣可以参考下面的文章。
Python 编写Windows服务程序:将Python作为Windows服务启动
Python实例浅谈之五Python守护进程和脚本单例运行
python 版的守护进程和Windows服务
配置环境
操作系统:
Windows 10 企业版
Windows 7 旗舰版
安装Python3.5.2
下载Python 3.5.2并安装
安装NSSM
下载NSSM压缩包并解压
安装Windows Server 2003 Resource Kit Tools
可选项,主要是想用tail -f
命令
下载Windows Server 2003 Resource Kit Tools 并安装
安装Git
可选项,下载Git并安装
安装Redis服务
可选项,下载Redis并安装
设置环境变量
依次进入计算机
=>属性
=>高级系统设置
=>环境变量
,双击Path
后,新建环境变量
1 | C:\Program Files\Python35 |
以上路径仅供参考,以实际安装路径为准
搭建项目
创建项目
clone celery-windows-daemon-demo项目
git clone https://github.com/Wayde2014/celery-windows-daemon-demo
安装Python依赖包
以管理员身份运行cmd,切换至项目目录
pip install -r requirements.txt
celery版本不能高于3.1.25,因为从4.0开始celery不再支持windows了
测试脚本是否正常工作
进入项目目录,执行python run.py
,等待5s后如果输出Test Success
测试OK。
通过tail -f test.log
可实时查看日志内容。
创建celery-demo-worker
服务并启动之
命令前后无`符号,此处是为了标示命令
1 | C:\WINDOWS\system32>`nssm install celery-demo-worker "c:\Program Files\Python35\Scripts\celery.exe"` |
创建celery-demo-beat
服务并启动之
命令前后无`符号,此处是为了标示命令
1 | C:\WINDOWS\system32>`nssm install celery-demo-beat "c:\Program Files\Python35\Scripts\celery.exe"` |
至此,celery-demo搭建完成,可通过tail -f test.log
查看日志,检查服务是否正常运行。