Newer
Older
import sys
import atexit
from optparse import OptionParser
from os.path import isfile, abspath
from cloudcontrol.node import __version__
from cloudcontrol.node.node import MainLoop
DEFAULT_CONFIG_FILE = '/etc/cc-node.conf'
# command line arguments...
oparser = OptionParser(version='%%prog %s' % __version__)
oparser.add_option('-d', '--daemonize', default=False, action='store_true',
help=u'run as daemon and write pid file')
oparser.add_option('-c', '--config', metavar='FILE',
default=DEFAULT_CONFIG_FILE,
help=u'configuration file ABSOLUTE path (default: %default)')
oparser.add_option('-p', '--pidfile', metavar='FILE',
help=u'pid file path for daemon mode')
options, args = oparser.parse_args()
# check argument configuration
if options.daemonize and not options.pidfile:
sys.exit(u'Please supply a pid file...')
options.config = abspath(options.config)
if not isfile(options.config):
sys.exit(u'Please supply a valid path to configuration file...')
# take care of pid file if daemon
if options.daemonize:
files_preserve = [pidfile]
else:
files_preserve = None
with DaemonContext(detach_process=options.daemonize,
files_preserve=files_preserve,
stderr=sys.stderr,
stdout=sys.stdout):
# take care of pidfile
if options.daemonize:
pidfile.write('%s' % os.getpid())
pidfile.flush()
@atexit.register
def clean_pidfile():
pidfile.seek(0)
pidfile.truncate()
pidfile.flush()