Supervisor
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
- Change location of logfile to /var/log/supervisord.log
- Change pidfile to /var/run/supervisor/supervisord.pid
- Changed ip/port number to allow remote access to web i/f
- Set user to 'supervisor'
- 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)