#!/usr/bin/env python # Filename: daemon.py # Make the process to run in the background. __author__ = "Karthikeyan Periasamy" __version__ = "0.1" __all__ = ["daemonize"] # Standard modules import os # OS interface functions. import sys # System specific functions. from syslog import * # Logging functions. # Daemon parameters UMASK = 0 # File mode creation mask for the calling process WORKDIR = "/" # The Working directory # Find the null device /dev/null if (hasattr(os, "devnull")): NULL_DEVICE = os.devnull else: NULL_DEVICE = "/dev/null" # Function def daemonize (procname): openlog (procname, LOG_PID) try: # Fork the child syslog (LOG_INFO, "Daemizing") syslog (LOG_INFO, "Creating the first child") pid = os.fork () # Exit from the parent if 0 != pid: syslog (LOG_INFO, "Parent exiting") os._exit (0) # Make the child as the leader of the process syslog (LOG_INFO, "Child created") syslog (LOG_INFO, "Creating a new session") os.setsid () # Fork a child again to make sure that no terminal device is connected to it. syslog (LOG_INFO, "Creating the second child") pid = os.fork () # Exit from the first child if 0 != pid: syslog (LOG_INFO, "First child exiting") os._exit (0) # Set the calling process's file mode creation mask syslog (LOG_INFO, "Set the calling process's file mode creation mask") os.umask (UMASK) # Changing working directory to '/' to make sure that # the process does not depend on any mounted partition # execpt the root of the filesystem logmsg = 'Changing working directory to "' + WORKDIR + '" to avoid dependencies' syslog (LOG_INFO, logmsg) os.chdir (WORKDIR) # Close standard input, output and error file descriptors syslog (LOG_INFO, "Closing I/O file descriptors") os.close (0) os.close (1) os.close (2) # Redirect standard output and errror to /dev/null os.open(NULL_DEVICE, os.O_RDWR) os.dup2(0, 1) os.dup2(0, 2) except: logmsg = "Unexpected error:" + repr (sys.exc_info()[1]) syslog (LOG_ERR, logmsg) os._exit (1) # --------------------------------------------------------------------------- # Main program (for testing) # --------------------------------------------------------------------------- if __name__ == '__main__': daemonize("daemon_test") syslog(LOG_INFO, 'Daemon is sleeping for 10 seconds') import time for i in range (10): syslog(LOG_INFO, 'Sleeping...') time.sleep(1) syslog(LOG_INFO, 'Daemon exiting') sys.exit(0)Reference: http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/
Saturday, June 19, 2010
Create daemon process in Python
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment