5 from dbuscron import Logger, OptionsParser
7 options = OptionsParser(
8 daemon=dict(names=('-f', '--nodaemon'), action='store_false', default=True),
9 quiet=dict(names=('--quiet', '-q'), action='count', default=0),
10 verbose=dict(names=('--verbose', '-v'), action='count', default=0),
11 config=dict(names=('--conf', '--config', '-c'), default='/etc/dbuscrontab'),
12 logfile=dict(names=('--log', '--logfile', '-l')),
13 userid=dict(names=('-u', '--user', '--uid', '--userid')),
14 groupid=dict(names=('-g', '--group', '--gid', '--groupid')))
18 logout = open(options.logfile, 'wb')
20 log = Logger(__name__, out=logout)
21 log.level = options.verbose - options.quiet + Logger.WARNING
28 userid = int(options.userid)
30 userid = pwd.getpwnam(options.userid)[2]
33 log.warn('Unable to find user', options.userid)
42 groupid = int(options.groupid)
45 groupid = grp.getgrnam(options.groupid)[2]
48 log.warn('Unable to find group', options.groupid)
52 groupid = pwd.getpwuid(userid)[3]
62 elif options.userid or options.groupid:
63 log.warn('Ignoring userid and groupid arguments: I am not a root to pretend somebody else.')
66 from dbuscron.daemonize import daemonize
68 pidfile='/var/run/dbuscron.pid',
69 logfile='/var/log/dbuscron.log'
72 from dbuscron import DbusBus, DbusRule, Command, Commands, CrontabParser
77 crontab = CrontabParser(options.config)
79 def load_config(parser):
80 for rule, cmd in parser:
81 matcher = DbusRule(**rule)
82 command = Command(cmd)
84 log('rule parsed', matcher, command)
85 commands.add(matcher, command)
89 def reload_config_on_signal(sig_no, stack):
90 log('Signal #%d received: reloading config...' % (sig_no))
93 log('Done config reloading.')
96 signal.signal(signal.SIGHUP, reload_config_on_signal)
98 commands.environ = crontab.environ
99 bus.attach_handler(commands.handler)
103 except KeyboardInterrupt: