Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Daemon Packaging Best Practices

Tags:

I have a tool which I have written in python and generally should be run as a daemon. What are the best practices for packaging this tool for distribution, particularly how should settings files and the daemon executable/script be handled?

Relatedly are there any common tools for setting up the daemon for running on boot as appropriate for the given platform (i.e. init scripts on linux, services on windows, launchd on os x)?

like image 967
SeanOC Avatar asked Feb 26 '09 01:02

SeanOC


1 Answers

The best tool I found for helping with init.d scripts is "start-stop-daemon". It will run any application, monitor run/pid files, create them when necessary, provide ways to stop the daemon, set process user/group ids, and can even background your process.

For example, this is a script which can start/stop a wsgi server:

#! /bin/bash  case "$1" in   start)     echo "Starting server"      # Activate the virtual environment     . /home/ali/wer-gcms/g-env/bin/activate      # Run start-stop-daemon, the $DAEMON variable contains the path to the     # application to run     start-stop-daemon --start --pidfile $WSGI_PIDFILE \         --user www-data --group www-data \         --chuid www-data \         --exec "$DAEMON"     ;;   stop)     echo "Stopping WSGI Application"      # Start-stop daemon can also stop the application by sending sig 15     # (configurable) to the process id contained in the run/pid file     start-stop-daemon --stop --pidfile $WSGI_PIDFILE --verbose     ;;   *)     # Refuse to do other stuff     echo "Usage: /etc/init.d/wsgi-application.sh {start|stop}"     exit 1     ;; esac  exit 0 

You can also see there an example of how to use it with a virtualenv, which I would always recommend.

like image 70
Ali Afshar Avatar answered Sep 22 '22 02:09

Ali Afshar