因为公司的服务器只有windos server。所以就将项目部署在了IIS上,但是紧接着的就是一系列的问题,其中最头疼的应该就是这个Celery的问题了。因为IIS部署的项目,启动的时候Celery并没有启动,就只能通过挂一个终端来跑这个Celery。但是异步模块放着很重要的任务直接就这样放在服务器上就显得很不安全,万一有人不小心关掉了这个cmd窗口那将带来意料不到的后果。这里分享一下我的解决办法。
1. 第一步,安装 workon
- 这里需要用到一个模块,叫做
workon
。 相信很多人都用过。这是一个很好用的虚拟化环境管理工具。安装也很简单。安装命令如下(请确保已安装了virtualenv 如没有请pip install virtualenv
):
pip install virtualenvwrapper-win -i https://pypi.douban.com/simple/
- 之后就可以通过如下命令来创建虚拟环境:
mkvirtualenv testenv
- 进入虚拟环境的命令(直接激活虚拟环境):
workon testenv
2.第二步,使用bat脚本
- 在桌面新建一个text文件。写入以下:
@echo off
workon testenv & python manage.py celery worker -l info -P eventlet
pause runserver ok
- 其中,
python manage.py celery worker -l info -P eventlet
为你自己的celery启动命令,有不同的Router,或者多个task可以使用&
符号 继续往第一行后边加可以把你所有需要终端启动的命令都写上去。例如:
@echo off
workon testenv & python manage.py celery worker -l info -P eventlet & python manage.py celery -A myproject beat -l info
pause runserver ok
-
之后将此文件的后缀改为
.bat
。(我这里将这个文件命名为 test.bat) -
这里推荐创建再通过一个新的bat来启动这个bat脚本。创建一个新的start.bat脚本,写入如下:
@echo off
call test.bat
- 直接运行 start.bat 就可以直接运行test.bat。到这里你会发现,这个bat脚本已经将你的celery用一个新的终端窗口运行起来了(这一步仅用于调试。这一步要确保你的celery被正常的启动,可以测试发起一个异步任务,确保异步任务没有问题之后。关掉终端)。
3.第三步,使用VBS脚本
- 我们需要做的是要他们后台运行,所以我们现在只差一件事,那就是隐藏掉之前test.bat所打开的终端。
- 新建一个run_celery.vbs文件。内容如下:
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:\Users\Administrator\Desktop\test.bat",0
- 这里
C:\Users\Administrator\Desktop\test.bat
就是你自己的test.bat文件路径。 - 之后启动这个vbs,就会直接在后台启动你的celey。(在运行这个vbs之前,我建议你可以先打开任务管理器,记录下当前系统中有没有在运行的cmd进程,若有的话,一定要先记录一下,在启动run_celery.vbs的时候会多出来一个或几个cmd的进程,可以将这几个多出来的进程写到一个text文件中。如果需要关掉celery。只需要结束这几个进程即可。)