Supervisor

From Wildsong
Revision as of 22:19, 31 March 2014 by Brian Wilson (talk | contribs)
Jump to navigationJump to search

http://supervisord.org

Q1. How do I set up a Python script so that I can easily start and stop it and monitor whether it's crashed?

Q2. Can I start multiple instances of the same script each with a different configuration?

Q3. Is Supervisor the answer?

Installation

% sudo apt-get install supervisor

If you want the latest version next do

% sudo apt-get remove supervisor
% sudo easy_install supervisor

This trick will cause the Debian/Ubuntu startup files to be left around which you can then edit. Like /etc/init.d/supervisor I added a user and group for "supervisor".

Configuration

sudo mkdir /etc/supervisor echo_supervisord_conf | sudo tee /etc/supervisor/supervisord.conf

/etc/defaults/supervisor: DAEMON_OPTS="-c /etc/supervisor/supervisord.conf"

sudo mkdir /var/run/supervisor sudo chown supervisor /var/run/supervisor

Things I changed in config file

  1. Change location of logfile to /var/log/supervisord.log
  2. Change pidfile to /var/run/supervisor/supervisord.pid
  3. Changed ip/port number to allow remote access to web i/f
  4. Set user to 'supervisor'
  5. Enable reading files from /etc/supervisor/conf.d/ (see 'include')

Do nothing test script

Here is a script that will log to the system log, and sleep for 10 minutes. It handles control-C exit.

#/usr/bin/python
import time, logging, logging.handlers
logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
handler = logging.handlers.SysLogHandler(address='/dev/log')
log.addHandler(handler)
log.info("Start doing nothing.")
forever = True
try:
   while forever:
      log.info("MARK")
      time.sleep(60 * 10) 
except KeyboardInterrupt:
   log.info("Interrupt detected.")
log.info("Completed successfully.")
exit(0)