Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Working implementation of daemon in Python

Tags:

python

daemon

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.

like image 365
RyanBrady Avatar asked Oct 22 '10 18:10

RyanBrady


People also ask

What is daemon process Python?

Daemon processes in PythonTo execute the process in the background, we need to set the daemonic flag to true. The daemon process will continue to run as long as the main process is executing and it will terminate after finishing its execution or when the main program would be killed.

What is daemon process example?

A daemon is a long-running background process that answers requests for services. The term originated with Unix, but most operating systems use daemons in some form or another. In Unix, the names of daemons conventionally end in "d". Some examples include inetd , httpd , nfsd , sshd , named , and lpd .


2 Answers

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.

like image 198
Srikar Appalaraju Avatar answered Sep 21 '22 12:09

Srikar Appalaraju


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.

like image 31
ianmclaury Avatar answered Sep 21 '22 12:09

ianmclaury