Python のプロセスをデーモン化する

別に Python に限った話では無く、他のプログラム言語でも手順は同じです。

#-*- coding: utf-8 -*-
import os
import sys


def daemonize(target=None, args=(), kwargs={}):
    # Quit Process Group Leader
    try:
        if os.fork() > 0:
            sys.exit(0)
    except OSError:
        sys.exit(1)

    # Create New Session
    try:
        os.setsid()
    except:
        sys.exit(1)

    # Create Daemon Process
    try:
        if os.fork() > 0:
            sys.exit(0)
    except OSError:
        sys.exit(1)

    os.chdir('/')
    os.umask(0)

    sys.stdin = open('/dev/null', 'r')
    sys.stdout = open('/dev/null', 'w')
    sys.stderr = open('/dev/null', 'w')

    target(*args, **kwargs)


def something():
    # something

if __name__ == '__main__':
    daemonize(target=something)