默认用 Tornado 写程序,修改完代码需要将文件上传,然后重启 Supervisord (supervisorctl reload),修改的程序才能生效。但这样比较麻烦,因为需要SSH到服务器进行重启操作。Tornado 自带的调试模式可以让我们轻松不少。
开启调试模式也很简单,只需要 import 一个模块即可。
1 |
import tornado.autoreload |
现在将修改的文件上传之后,不需要再重启,修改的结果就会显示出来了。
另外也可以在 settings 加入 debug选项:
01 |
import tornado.httpserver |
03 |
import tornado.options |
06 |
settings = { 'debug' : True } |
08 |
define( "debug" ,default = True , help = "Debug Mode" , type = bool ) |
11 |
tornado.options.parse_command_line() |
12 |
application = tornado.web.Application([ |
14 |
(r "/nowamagic/" , NowaMagicHandler), |
16 |
http_server = tornado.httpserver.HTTPServer(application) |
17 |
http_server.listen(options.port) |
18 |
tornado.ioloop.IOLoop.instance().start() |
Tornado 官方教程上的 settings 是这样的:
02 |
"cookie_secret" : "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=" , |
03 |
"login_url" : "/login" , |
07 |
application = tornado.web.Application([ |
09 |
(r "/login" , LoginHandler), |
当然也设置settings字典可以这样:
2 |
cookie_secret = "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=" , |
settings可以设置什么?
02 |
template_path = os.path.join(os.path.dirname(__file__), "templates" ) |
05 |
static_path = os.path.join(os.path.dirname(__file__), "static" ), |
12 |
login_url = "/login-do" , |
20 |
cookie_secret = "dskfhisdjklagkfdklag;lkjasdklgjkldsjaklgjkldsfksdklf" |
28 |
template_loader = utils.ZipLoader, |
35 |
static_url_prefix = "/mystatic/" , |
39 |
static_handler_class = MyStaticFileHandler, |
43 |
static_handler_args = { "key1" : "value1" , "key2" : "value2" } |
47 |
log_function = your_fun, |
调试模式的缺点是:只感知.py文件的改变,模版的改变不会加载,有些特殊的错误,比如import的错误,就会直接让服务下线,到时候还得手动重启。还有就是调试模式和 HTTPServer 的多进程模式不兼容。在调试模式下,你必须将 HTTPServer.start 的参数设为不大于 1 的数字。
Supervisord进程管理工具的安装使用
用supervisord管理Tornado进程
先来介绍 supervisord。Supervisor 是一个进程监控程序。满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 Supervisor。
1. 安装
安装很简单:
就这样就完成了安装,在 /root/nowamagic_venv/lib/python2.7/site-packages/ 文件夹下发现了安装目录,我这里是在 virtualenv 下安装的。
2. 配置
可以用以下命令生成配置文件:
1 |
echo_supervisord_conf > etc/supervisord.conf |
配置文件生成之后,在最末尾加上这几行东西:
2 |
command=python /root/nmapp2_venv/test.py --port=8888 |
3 |
directory=/root/nmapp2_venv/ |
OK,完成配置。
3. 启动 supervisor
启动 supervisor:
如果报错,请检查报错信息,比如:
1 |
Error: No config file found at default paths ( |
2 |
/root/nmapp2_venv/etc/supervisord.conf, |
3 |
/root/nmapp2_venv/supervisord.conf, |
6 |
/etc/supervisord.conf); use the -c option to specify a config file at a different path |
7 |
For help, use /root/nmapp2_venv/bin/supervisord -h |
在上面的默认目录中,丢一个 supervisord.conf 即可。
如果报 http://localhost:9001 refused connection 错误,那是因为 supervisord 没有启动的原因。只要放好 supervisord.conf 文件,即可解决问题。
supervisorctl start all 开启全部服务。
如果修改了配置文件,supervisorctl reload 重启。修改了 Supervisor 的配置,也可以用 supervisorctl reread 来重新载入,或用 supervisorctl reload 来载入新配置并重启所有子进程。直接运行 supervisorctl 的话,可以进入命令行模式操作。