Running Tornado in production

Supervisor is a simple yet powerful client/server system to monitor and control processes on UNIX systems.

I have a number of Tornado servers that are already managed by supervisor. I have found it stable and flexible enough for most tasks.

Installing supervisor

The installation is pretty straight forward.

sudo easy_install supervisor

This will install supervisor and all the required dependencies.

Configuring supervisor

Supervisor ships with a configuration file generator. This is a good way to understand all the configuration options that supervisor supports.

Run this command if your interested in generating the default configuration.

echo_supervisord_conf > supervisord.conf

I am going to skip the default configuration file and just write one from scratch.

This is what my /etc/supervisord.conf looks like

[unix_http_server]
file=/tmp/supervisor.sock
 
[supervisord]
logfile=/var/log/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=warn
pidfile=/var/log/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
user=nobody
childlogdir=/var/log/
 
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
 
[group:myapp]
programs=myapp_server-3001,myapp_server-3002,myapp_server-3003
 
[program:myapp_server-3001]
command=/srv/myapp/myapp_server.py --port=3001
directory=/srv/myapp/
autorestart=true
redirect_stderr=true
stdout_logfile=/srv/myapp/logs/myapp_server-3001.log
stdout_logfile_maxbytes=500MB
stdout_logfile_backups=50
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
loglevel=warn
 
[program:myapp_server-3002]
command=/srv/myapp/myapp_server.py --port=3002
directory=/srv/myapp/
autorestart=true
redirect_stderr=true
stdout_logfile=/srv/myapp/logs/myapp_server-3002.log
stdout_logfile_maxbytes=500MB
stdout_logfile_backups=50
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
loglevel=warn
 
[program:myapp_server-3003]
command=/srv/myapp/myapp_server.py --port=3003
directory=/srv/myapp/
autorestart=true
redirect_stderr=true
stdout_logfile=/srv/myapp/logs/myapp_server-3003.log
stdout_logfile_maxbytes=500MB
stdout_logfile_backups=50
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
loglevel=warn

As you see I start 3 instances of my application on port 3000, 3001, and 3002. It is highly recommended to front your tornado servers with nginx.

Running Supervisor

The two main scripts that you need to use are supervisord and supervisorctl.

supervisord is the backend script that manages the processes and logs. It is also responsible for ensuring that the the processes are up and running.

supervisorctl is the control script that you can use to talk to multiple supervisord daemons. You can use this script to start multiple services or groups.

Some important commands

Basic commands

  • start Starts processes
  • stop Stops processes
  • restart Restarts processes
  • status Status of a process

The not so basic commands

  • update Reloads the configuration file
  • reload Restarts the supervisord daemon
  • add Adds processes/groups
  • remove Removes processes/groups
  • tail Start tailing a log file

0 comments

Post new comment

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>, <apache>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. The supported tag styles are: <foo>, [foo].

More information about formatting options

Drupal theme by Kiwi Themes.