+#!/usr/bin/env python3
+
+import argparse
+import json
+import logging
+import os
+import signal
+import time
+
+from bunch import Bunch
+
+def handle_interrupt(sig, frame):
+ global stop
+ if os.getpid() == main_pid:
+ logging.info( "Got stop signal." )
+ stop = True
+
+main_pid = os.getpid()
+signal.signal(signal.SIGINT, handle_interrupt)
+stop = False
+
+parser = argparse.ArgumentParser(description='Photo Sort Daemon.')
+parser.add_argument('config_file', type=str, help='path to config file')
+parser.add_argument('-l', '--log-level', type=str, default='INFO', dest='log_lvl',
+ choices=['DEBUG', 'INFO', 'WARNING'], help='select log level')
+
+args = parser.parse_args()
+
+logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s',
+ level=logging.getLevelName(args.log_lvl),
+ datefmt='%m/%d/%Y %H:%M:%S')
+
+with open(args.config_file) as f:
+ cfg = json.load(f)
+
+bunches = []
+for bunch_cfg in cfg['bunches']:
+ bunches.append( Bunch(bunch_cfg) )
+
+
+for bunch in bunches:
+ bunch.start()
+
+while not stop:
+ time.sleep(2.0)
+
+for bunch in bunches:
+ bunch.stop()