From d176dab6540cb65cd77957705750a06b8f5b618f Mon Sep 17 00:00:00 2001 From: Andreas Wrede Date: Fri, 25 Oct 2013 15:15:02 -0400 Subject: [PATCH] fix restart problem --- hbd | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hbd b/hbd index d1b63d0..7605361 100755 --- a/hbd +++ b/hbd @@ -2,7 +2,7 @@ # $Id: hbd,v 1.38 2013/07/14 02:25:05 andreas Exp $ # Wait for heartbeat messages and act on them (or their absence) # -VER = 1.38 +VER = 1.51 import time, os, string, sys, socket, atexit, select, SocketServer, getopt, signal, cPickle, smtplib, traceback, urllib @@ -500,10 +500,11 @@ def exitcurses(): curses.endwin() +class HtmlServer(SocketServer.TCPServer): + allow_reuse_address = True # # class HtmlHandler(SocketServer.BaseRequestHandler): - allow_reuse_address = True def buildhead(self, title="Heartbeat", refresh=None): @@ -536,6 +537,7 @@ class HtmlHandler(SocketServer.BaseRequestHandler): def handle(self): + global sig, running headers=[] headers.append("Date: %s" % time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(now))) headers.append("Server: hbd") @@ -586,6 +588,13 @@ class HtmlHandler(SocketServer.BaseRequestHandler): res=self.buildhead() res.append("Done") + elif upar[0] == "/r": # restart + res=self.buildhead() + res.append("restart request") + sig=signal.SIGHUP + running=False + log("restart request") + else: code = 404 cause = "Not Found" @@ -612,13 +621,9 @@ class HtmlHandler(SocketServer.BaseRequestHandler): def saveandrestart(): - if DEBUG: sys.stderr.write("mark 1\n") sock.close() -# if DEBUG: sys.stderr.write("mark 2\n") # serv.shutdown() #N.B. dont shutdown() as we don't use serv_forever - if DEBUG: sys.stderr.write("mark 3\n") serv.server_close() - if DEBUG: sys.stderr.write("mark 4\n") log("restarting") os.execv(sys.argv[0], [sys.argv[0]]+cmdargs) @@ -791,7 +796,7 @@ sock.bind(("", hb_port)) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ilist.append(sock) -serv = SocketServer.TCPServer((hbd_host, hbd_port), HtmlHandler) +serv = HtmlServer((hbd_host, hbd_port), HtmlHandler) ilist.append(serv.fileno()) if not forground: