5 from dbuscron.parser import OptionsParser
6 options = OptionsParser(
7 daemon=dict(names=('-f', '--nodaemon'), action='store_false', default=True),
8 quiet=dict(names=('--quiet', '-q'), action='count', default=0),
9 verbose=dict(names=('--verbose', '-v'), action='count', default=0),
10 config=dict(names=('--conf', '--config', '-c'), default='/etc/dbuscrontab'),
11 logfile=dict(names=('--log', '--logfile', '-l')),
12 userid=dict(names=('-u', '--user', '--uid', '--userid')),
13 groupid=dict(names=('-g', '--group', '--gid', '--groupid')))
19 logout = open(options.logfile, 'wb')
21 from dbuscron.logger import Logger
22 log = Logger(__name__, out=logout)
23 log.level = options.verbose - options.quiet + Logger.WARNING
25 # 3. process properties setup
27 if options.userid or options.groupid:
28 from dbuscron.util import set_user_and_group
29 set_user_and_group(options.userid, options.groupid)
32 from dbuscron.util import daemonize
34 pidfile='/var/run/dbuscron.pid',
35 logfile='/var/log/dbuscron.log')
37 except SystemError, e:
41 # 4. main instances initialization
42 from dbuscron.bus import DbusBus, DbusRule
43 from dbuscron.command import Command, Commands
44 from dbuscron.parser import CrontabParser, CrontabParserError
48 crontab = CrontabParser(options.config)
51 def load_config(parser):
53 for rule, cmd in parser:
54 matcher = DbusRule(**rule)
55 command = Command(cmd)
57 log('rule parsed', matcher, command)
58 commands.add(matcher, command)
60 commands.environ = parser.environ
62 except CrontabParserError, e:
68 # 6. setup signal handlers
69 def reload_config_on_signal(sig_no, stack):
70 log('Signal #%d received: reloading config...' % (sig_no))
73 log('Done config reloading.')
76 signal.signal(signal.SIGHUP, reload_config_on_signal)
78 # 7. setup DBUS handlers
79 bus.attach_handler(commands.handler)
81 # 8. run main application listen loop
84 except KeyboardInterrupt: