Sto lavorando su un demone in cui ho bisogno di incorporare un server HTTP. Sto provando a farlo con BaseHTTerver, che quando lo eseguo in primo piano, funziona bene, ma quando provo a lanciare il demone sullo sfondo, smette di funzionare. La mia applicazione principale continua a funzionare, ma BaseHTTerver non lo fa.Daemonizing BaseHTTPServer di python
Credo che questo abbia qualcosa a che fare con il fatto che BaseHTTerver invia i dati di registro a STDOUT e STDERR. Sto reindirizzando quelli ai file. Ecco il frammento di codice:
# Start the HTTP Server
server = HTTPServer((config['HTTPServer']['listen'],config['HTTPServer']['port']),HTTPHandler)
# Fork our process to detach if not told to stay in foreground
if options.foreground is False:
try:
pid = os.fork()
if pid > 0:
logging.info('Parent process ending.')
sys.exit(0)
except OSError, e:
sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
sys.exit(1)
# Second fork to put into daemon mode
try:
pid = os.fork()
if pid > 0:
# exit from second parent, print eventual PID before
print 'Daemon has started - PID # %d.' % pid
logging.info('Child forked as PID # %d' % pid)
sys.exit(0)
except OSError, e:
sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
sys.exit(1)
logging.debug('After child fork')
# Detach from parent environment
os.chdir('/')
os.setsid()
os.umask(0)
# Close stdin
sys.stdin.close()
# Redirect stdout, stderr
sys.stdout = open('http_access.log', 'w')
sys.stderr = open('http_errors.log', 'w')
# Main Thread Object for Stats
threads = []
logging.debug('Kicking off threads')
while ...
lots of code here
...
server.serve_forever()
sto facendo qualcosa di sbagliato qui o è BaseHTTPServer in qualche modo impedito di diventare daemonized?
Modifica: codice aggiornato per dimostrare il flusso di codice aggiuntivo, in precedenza mancante e che mostra log.debug nel mio demone biforcuto, background sto colpendo codice dopo fork.
Perché è esattamente BAD? per favore, questo è uno dei migliori risultati in google ... Ci sono una massiccia quantità di librerie di python prefabbricate per http quindi una descrizione più dettagliata di quelle sarebbe stupefacente. – nsij22