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')),
14 sessionaddr=dict(names=('-s', '--session', '--sessionaddr')))
20 logout = open(options.logfile, 'wb')
22 from dbuscron.logger import Logger
23 log = Logger(__name__, out=logout)
24 log.level = options.verbose - options.quiet + Logger.WARNING
26 # 3. process properties setup
28 if options.userid or options.groupid:
29 from dbuscron.util import set_user_and_group
30 set_user_and_group(options.userid, options.groupid)
33 from dbuscron.util import daemonize
35 pidfile='/var/run/dbuscron.pid',
36 logfile='/var/log/dbuscron.log')
38 except SystemError, e:
42 # 4. main instances initialization
43 from dbuscron.bus import DbusBus, DbusRule
44 from dbuscron.command import Command, Commands
45 from dbuscron.parser import CrontabParser, CrontabParserError
47 bus = DbusBus(options.sessionaddr)
50 config_files = [ options.config ]
51 if not options.config.endswith('.d'):
52 config_files.insert(0, options.config+'.d')
53 crontab = CrontabParser(*config_files)
56 def load_config(parser):
57 log("Loading config from", parser.filename, "...")
59 for rule, cmd in parser:
60 matcher = DbusRule(**rule)
61 command = Command(cmd)
63 log('rule parsed', matcher, command)
64 commands.add(matcher, command)
66 commands.environ = parser.environ
68 except CrontabParserError, e:
74 # 6. setup signal handlers
75 def reload_config_on_signal(sig_no, stack):
76 log('Signal #%d received: reloading config...' % (sig_no))
79 log('Done config reloading.')
82 signal.signal(signal.SIGHUP, reload_config_on_signal)
84 # 7. setup DBUS handlers
85 bus.attach_handler(commands.handler)
87 # 8. run main application listen loop
90 except KeyboardInterrupt: