tags:

views:

87

answers:

2

Does anyone know of a working and well documented implementation of a daemon using python? Please post a link here if you know of a project that fits these two requirements.

+3  A: 

Three options I can think of-

  1. Make a cron job that calls your script. Cron is a common name for a GNU/Linux daemon that periodically launches scripts according to a schedule you set. You add your script into a crontab or place a symlink to it into a special directory and the daemon handles the job of launching it in the background. You can read more at wikipedia. There is a variety of different cron daemons, but your GNU/Linux system should have it already installed.
  2. Pythonic approach (a library, for example) for your script to be able to daemonize itself. Yes, it will require a simple event loop (where your events are timer triggering, possibly, provided by sleep function). Here is the one I recommend & use - A simple unix/linux daemon in Python
  3. Use python multiprocessing module. The nitty-gritty of trying to fork a process etc. are hidden in this implementation. It's pretty neat.

I wouldn't recommend 2 or 3 'coz you're in fact repeating cron functionality. The Linux system paradigm is to let multiple simple tools interact and solve your problems. Unless there are additional reasons why you should make a daemon (in addition to trigger periodically), choose the other approach.

Also, if you use daemonize with a loop and a crash happens, make sure that you have logs which will help you debug. Also devise a way so that the script starts again. While if the script is added as a cron job, it will trigger again in the time gap you kept.

MovieYoda
I've been trying #2 without success. it's like once the daemon forks itself, I can't reference my django project anymore. thinking it's a path issue. see http://stackoverflow.com/questions/3992175/python-import-module-results-in-nameerror
RJBrady
did you follow the code example in the link I gave? That works fine for me.
MovieYoda
yes, I followed it. downloaded his daemon.py, subclassed it. when trying to import my django project it fails.
RJBrady
"Two options" numbered "1.", "2." and "3.". What's wrong with this picture?
S.Lott
@S.Lott Started with 2 got one more option :) I guess it's like buy 2 get 1 free ;)
MovieYoda
so the simple unix/linux daemon did work. it of course was my own fault it was failing, due to my misunderstanding of how django searches for modules when using the orm from an external script.
RJBrady
@Brady oh Cool! Also, in keeping with good practices at StackOverflow, please upvote any answer that has helped you and finally mark the 'one' answer that has helped you the most as 'correct' (green check).
MovieYoda
A: 

If you just want to run a daemon, consider Supervisor, a daemon that itself controls and manages daemons.

If you want to look at the nitty-gritty, you can check out Supervisor's launch script or some of the responses to this lazyweb request.

ianmclaury