diff --git a/CHANGELOG b/CHANGELOG index 2833ec7995..9b0ae1e4e4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -29,6 +29,8 @@ ver. 0.8.2 (2008/??/??) - stable 2.3. - New log rotation detection algorithm. - Print monitored files in status. +- Create a PID file in /var/run/fail2ban/. Thanks to Julien + Perez. ver. 0.8.1 (2007/08/14) - stable ---------- diff --git a/server/server.py b/server/server.py index 1ec301b46f..f363ca6e61 100644 --- a/server/server.py +++ b/server/server.py @@ -36,6 +36,8 @@ logSys = logging.getLogger("fail2ban.server") class Server: + + PID_FILE = "/var/run/fail2ban/fail2ban.pid" def __init__(self, daemon = False): self.__loggingLock = Lock() @@ -57,6 +59,15 @@ def __sigTERMhandler(self, signum, frame): def start(self, sock, force = False): logSys.info("Starting Fail2ban v" + version.version) + # Creates a PID file. + try: + logSys.debug("Creating PID file %s" % Server.PID_FILE) + pidFile = open(Server.PID_FILE, 'w') + pidFile.write("%s\n" % os.getpid()) + pidFile.close() + except IOError, e: + logSys.error("Unable to create PID file: %s" % e) + # Install signal handlers signal.signal(signal.SIGTERM, self.__sigTERMhandler) signal.signal(signal.SIGINT, self.__sigTERMhandler) @@ -76,6 +87,12 @@ def start(self, sock, force = False): self.__asyncServer.start(sock, force) except AsyncServerException, e: logSys.error("Could not start server: %s", e) + # Removes the PID file. + try: + logSys.debug("Remove PID file %s" % Server.PID_FILE) + os.remove(Server.PID_FILE) + except OSError, e: + logSys.error("Unable to remove PID file: %s" % e) logSys.info("Exiting Fail2ban") def quit(self):