Tôi đang làm việc trên một daemon nơi tôi cần phải nhúng một máy chủ HTTP. Tôi đang cố gắng để làm điều đó với BaseHTTPServer, khi tôi chạy nó ở phía trước, nó hoạt động tốt, nhưng khi tôi thử và nĩa daemon vào nền, nó ngừng hoạt động. Ứng dụng chính của tôi tiếp tục hoạt động, nhưng BaseHTTPServer thì không.Daemonizing BaseHTTPServer của python
Tôi tin rằng điều này có liên quan đến thực tế là BaseHTTPServer gửi dữ liệu nhật ký tới STDOUT và STDERR. Tôi đang chuyển hướng các tệp đó đến tệp. Dưới đây là đoạn mã:
# 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()
Tôi đang làm điều gì đó sai ở đây hoặc là BaseHTTPServer bằng cách nào đó đã ngăn không cho được daemonized?
Chỉnh sửa: Đã cập nhật mã để chứng minh dòng mã bổ sung, trước đó bị thiếu và log.debug hiển thị trong nền da nền được chia hai, tôi đang nhấn mã sau ngã ba.
Tại sao chính xác là BAD? xin vui lòng, đây là một trong những kết quả hàng đầu trong google ... Có một số lượng lớn các thư viện trăn dựng sẵn cho http vì vậy nhiều hơn một mô tả của những người sẽ là tuyệt vời là tốt. – nsij22