Commit aeecbf173147d0eef22961c807f55c756417235c

Authored by decalage2
1 parent 85140b50

mraptor_milter: added daemonize to run as a Unix daemon

Showing 1 changed file with 37 additions and 2 deletions
oletools/mraptor_milter.py
@@ -50,8 +50,18 @@ http://www.decalage.info/python/oletools @@ -50,8 +50,18 @@ http://www.decalage.info/python/oletools
50 # 2016-08-08 v0.01 PL: - first version 50 # 2016-08-08 v0.01 PL: - first version
51 # 2016-08-12 v0.02 PL: - added logging to file with time rotation 51 # 2016-08-12 v0.02 PL: - added logging to file with time rotation
52 # - archive each e-mail to a file before filtering 52 # - archive each e-mail to a file before filtering
  53 +# 2016-08-30 v0.03 PL: - added daemonize to run as a Unix daemon
53 54
54 -__version__ = '0.02' 55 +__version__ = '0.03'
  56 +
  57 +# --- TODO -------------------------------------------------------------------
  58 +
  59 +# TODO: option to run in the foreground for troubleshooting
  60 +# TODO: option to write logs to the console
  61 +# TODO: options to set listening port and interface
  62 +# TODO: config file for all parameters
  63 +# TODO: option to run as a non-privileged user
  64 +# TODO: handle files in archives
55 65
56 66
57 # --- IMPORTS ---------------------------------------------------------------- 67 # --- IMPORTS ----------------------------------------------------------------
@@ -92,6 +102,11 @@ LOGFILE_PATH = os.path.join(LOGFILE_DIR, LOGFILE_NAME) @@ -92,6 +102,11 @@ LOGFILE_PATH = os.path.join(LOGFILE_DIR, LOGFILE_NAME)
92 ARCHIVE_DIR = '/var/log/mraptor_milter' 102 ARCHIVE_DIR = '/var/log/mraptor_milter'
93 # ARCHIVE_DIR = '.' 103 # ARCHIVE_DIR = '.'
94 104
  105 +# file to store PID for daemonize
  106 +PIDFILE = "/tmp/mraptor_milter.pid"
  107 +
  108 +
  109 +
95 # === LOGGING ================================================================ 110 # === LOGGING ================================================================
96 111
97 # Set up a specific logger with our desired output level 112 # Set up a specific logger with our desired output level
@@ -319,6 +334,12 @@ def main(): @@ -319,6 +334,12 @@ def main():
319 print('mraptor_milter v%s - http://decalage.info/python/oletools' % __version__) 334 print('mraptor_milter v%s - http://decalage.info/python/oletools' % __version__)
320 print('logging to file %s' % LOGFILE_PATH) 335 print('logging to file %s' % LOGFILE_PATH)
321 print('Press Ctrl+C to stop.') 336 print('Press Ctrl+C to stop.')
  337 +
  338 + # make sure the log directory exists:
  339 + try:
  340 + os.makedirs(LOGFILE_DIR)
  341 + except:
  342 + pass
322 # Add the log message handler to the logger 343 # Add the log message handler to the logger
323 # log to files rotating once a day: 344 # log to files rotating once a day:
324 handler = logging.handlers.TimedRotatingFileHandler(LOGFILE_PATH, when='D', encoding='utf8') 345 handler = logging.handlers.TimedRotatingFileHandler(LOGFILE_PATH, when='D', encoding='utf8')
@@ -343,5 +364,19 @@ def main(): @@ -343,5 +364,19 @@ def main():
343 Milter.runmilter("mraptor_milter", SOCKET, TIMEOUT) 364 Milter.runmilter("mraptor_milter", SOCKET, TIMEOUT)
344 log.info('Stopping mraptor_milter.') 365 log.info('Stopping mraptor_milter.')
345 366
  367 +
346 if __name__ == "__main__": 368 if __name__ == "__main__":
347 - main() 369 +
  370 + # Using daemonize:
  371 + # See http://daemonize.readthedocs.io/en/latest/
  372 + from daemonize import Daemonize
  373 + daemon = Daemonize(app="mraptor_milter", pid=PIDFILE, action=main)
  374 + daemon.start()
  375 +
  376 + # Using python-daemon - Does not work as-is, need to create the PID file
  377 + # See https://pypi.python.org/pypi/python-daemon/
  378 + # See PEP-3143: https://www.python.org/dev/peps/pep-3143/
  379 + # import daemon
  380 + # import lockfile
  381 + # with daemon.DaemonContext(pidfile=lockfile.FileLock(PIDFILE)):
  382 + # main()