Каков был бы самый простой путь к daemonize сценарий Python в Linux?

В дополнение к другим ответам структура может (но обычно не имеет) иметь виртуальные функции, и в этом случае размер структуры также будет содержать пространство для vtbl.

10
задан edomaur 22 September 2008 в 16:50
поделиться

5 ответов

Посмотрите Stevens и также этот долгий поток на activestate, который я нашел лично, чтобы быть и главным образом неправильным и очень к подробному, и я придумал это:

from os import fork, setsid, umask, dup2
from sys import stdin, stdout, stderr

if fork(): exit(0)
umask(0) 
setsid() 
if fork(): exit(0)

stdout.flush()
stderr.flush()
si = file('/dev/null', 'r')
so = file('/dev/null', 'a+')
se = file('/dev/null', 'a+', 0)
dup2(si.fileno(), stdin.fileno())
dup2(so.fileno(), stdout.fileno())
dup2(se.fileno(), stderr.fileno())

Если необходимо остановить тот процесс снова, он требуется, чтобы знать pid, обычным решением этого является pidfiles. Сделайте это при необходимости в том

from os import getpid
outfile = open(pid_file, 'w')
outfile.write('%i' % getpid())
outfile.close()

Из соображений безопасности Вы могли бы рассмотреть любой из них после демонизации

from os import setuid, setgid, chdir
from pwd import getpwnam
from grp import getgrnam
setuid(getpwnam('someuser').pw_uid)
setgid(getgrnam('somegroup').gr_gid)
chdir('/') 

Вы могли также использовать nohup, но это не работает хорошо с модулем подпроцесса Python

21
ответ дан 3 December 2019 в 15:36
поделиться
4
ответ дан 3 December 2019 в 15:36
поделиться

Используйте grizzled.os.daemonize:

$ easy_install grizzled

>>> from grizzled.os import daemonize
>>> daemon.daemonize()

Чтобы понять, как это работает или сделать это самостоятельно, считайте обсуждение ActiveState.

0
ответ дан 3 December 2019 в 15:36
поделиться

Если Вы не заботитесь о фактических обсуждениях (которые имеют тенденцию идти offtopic и не предлагают авторитетный ответ), можно выбрать некоторую библиотеку, которая сделает вкус легче. Я повторно прокомментировал бы взгляд на ll-xist, эта библиотека содержит большой объем спасительного кода, как помощник заданий крона, платформа демона, и (что не является интересным Вам, но является действительно большим), объектно-ориентированный XSL (ll-xist сам).

1
ответ дан 3 December 2019 в 15:36
поделиться

Я недавно использовал Туркменбаши :

$ easy_install turkmenbashi
import Turkmenbashi

class DebugDaemon (Turkmenbashi.Daemon):

    def config(self):
        self.debugging = True

    def go(self):
        self.debug('a debug message')
        self.info('an info message')
        self.warn('a warning message')
        self.error('an error message')
        self.critical('a critical message')

if __name__=="__main__":
    d = DebugDaemon()
    d.config()
    d.setenv(30, '/var/run/daemon.pid', '/tmp', None)
    d.start(d.go)
2
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: