3 # bus type sender interface path member destination args command
7 # Headphones unplugged:
8 # S signal * org.freedesktop.Hal.Manager /org/freedesktop/Hal/Manager DeviceRemoved * * echo Headphones unplugged;
11 # S signal * com.nokia.csd.Call /com/nokia/csd/call Coming * * echo $DBUS_ARG1 is calling
16 if __name__ == '__main__':
18 from dbuscron import Logger, OptionsParser
20 options = OptionsParser(
21 daemon=dict(names=('-f', '--nodaemon'), action='store_false', default=True),
22 quiet=dict(names=('--quiet', '-q'), action='count', default=0),
23 verbose=dict(names=('--verbose', '-v'), action='count', default=0),
24 config=dict(names=('--conf', '--config', '-c'), default='/etc/dbuscrontab'),
25 logfile=dict(names=('--log', '--logfile', '-l')))
29 logout = open(options.logfile, 'wb')
31 log = Logger(__name__, out=logout)
32 log.level = options.verbose - options.quiet + Logger.WARNING
35 from dbuscron.daemonize import daemonize
37 pidfile='/var/run/dbuscron.pid',
38 logfile='/var/log/dbuscron.log'
41 from dbuscron import DbusBus, DbusRule, Command, Commands, CrontabParser
46 crontab = CrontabParser(options.config)
48 def load_config(parser):
49 for rule, cmd in parser:
50 matcher = DbusRule(**rule)
51 command = Command(cmd)
53 log('rule parsed', matcher, command)
54 commands.add(matcher, command)
58 def reload_config_on_signal(sig_no, stack):
59 log('Signal #%d received: reloading config...' % (sig_no))
62 log('Done config reloading.')
65 signal.signal(signal.SIGHUP, reload_config_on_signal)
67 commands.environ = crontab.environ
68 bus.attach_handler(commands.handler)
72 except KeyboardInterrupt:
75 # vim: ts=8 sts=4 sw=4 et