как запустить фоновую задачу через cgi python?

Discussion in 'PHP' started by Дикс, 18 Mar 2013.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Столкнулся с такой проблемой.
    python3-скрипт запускается апачем как cgi и с помощью subprocess запускает фоновый процесс - другой питон-скрипт.
    Но если закрыть страницу с первым скриптом, то умирает и второй.

    Пробовал делать демона с помощью двух fork(), запускать через ‘at now’ - ничего не помогает.
    Если запустить скрипт из консоли, то он запустит фоновый процесс, а сам завершит работу и никаких проблем. Но если запускать через cgi - то все фоновые умирают после закрытия страницы.

    Как же из веба запустить демона чтобы не умирал?

    вот что у меня сейчас есть: http://pastebin.com/eUqu1pPC
     
    #1 Дикс, 18 Mar 2013
    Last edited: 18 Mar 2013
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Дикс Попробуйте вызвать следующую функцию в создаваемом процессе. Будет работать только в linux'ах
    Code:
    def daemonize():
        import os, warnings
        if os.name != 'posix':
            warnings.warn('Cant create daemon on non-posix system')
            return
    
        if os.fork(): os._exit(0)
        os.setsid()
        if os.fork(): os._exit(0)
        os.umask(0o022)
        null=os.open('/dev/null', os.O_RDWR)
        for i in range(3):
            try:
                os.dup2(null, i)
            except OSError as e:
                if e.errno != 9: raise
        os.close(null)
    
     
    _________________________