| #!/usr/bin/env python |
| import os |
| import argparse |
| os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings") |
| from observer.backend import Backend |
| from planetstack.config import Config |
| |
| try: |
| from django import setup as django_setup # django 1.7 |
| except: |
| django_setup = False |
| |
| config = Config() |
| |
| # after http://www.erlenstar.demon.co.uk/unix/faq_2.html |
| def daemon(): |
| """Daemonize the current process.""" |
| if os.fork() != 0: os._exit(0) |
| os.setsid() |
| if os.fork() != 0: os._exit(0) |
| os.umask(0) |
| devnull = os.open(os.devnull, os.O_RDWR) |
| os.dup2(devnull, 0) |
| # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull |
| logdir=os.path.dirname(config.observer_logfile) |
| # when installed in standalone we might not have httpd installed |
| if not os.path.isdir(logdir): os.mkdir(logdir) |
| crashlog = os.open('%s'%config.observer_logfile, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644) |
| os.dup2(crashlog, 1) |
| os.dup2(crashlog, 2) |
| |
| def main(): |
| # Generate command line parser |
| parser = argparse.ArgumentParser(usage='%(prog)s [options]') |
| parser.add_argument('-d', '--daemon', dest='daemon', action='store_true', default=False, |
| help='Run as daemon.') |
| # smbaker: util/config.py parses sys.argv[] directly to get config file name; include the option here to avoid |
| # throwing unrecognized argument exceptions |
| parser.add_argument('-C', '--config', dest='config_file', action='store', default="/opt/planetstack/plstackapi_config", |
| help='Name of config file.') |
| args = parser.parse_args() |
| |
| if args.daemon: daemon() |
| |
| if django_setup: # 1.7 |
| django_setup() |
| |
| backend = Backend() |
| backend.run() |
| |
| if __name__ == '__main__': |
| |
| main() |