From c907c842427b4c031283b07e5b53824828f8df58 Mon Sep 17 00:00:00 2001 From: James Socol Date: Thu, 26 Jan 2012 14:48:46 -0500 Subject: [PATCH] Add crontab generating script. --- bin/crontab/crontab.tpl | 20 +++++++++++++++++++ bin/crontab/gen-crons.py | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 bin/crontab/crontab.tpl create mode 100644 bin/crontab/gen-crons.py diff --git a/bin/crontab/crontab.tpl b/bin/crontab/crontab.tpl new file mode 100644 index 0000000..11ca99d --- /dev/null +++ b/bin/crontab/crontab.tpl @@ -0,0 +1,20 @@ +# +# {{ header }} +# + +# MAILTO=some-email-list + +HOME=/tmp + +# Every minute! +* * * * * {{ cron }} + +# Every hour. +42 * * * * {{ django }} cleanup + +# Every 2 hours. +1 */2 * * * {{ cron }} something + +# Etc... + +MAILTO=root diff --git a/bin/crontab/gen-crons.py b/bin/crontab/gen-crons.py new file mode 100644 index 0000000..85cc4bb --- /dev/null +++ b/bin/crontab/gen-crons.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +import os +from optparse import OptionParser + +from jinja2 import Template + + +HEADER = '!!AUTO-GENERATED!! Edit bin/crontab/crontab.tpl instead.' +TEMPLATE = open(os.path.join(os.path.dirname(__file__), 'crontab.tpl')).read() + + +def main(): + parser = OptionParser() + parser.add_option('-w', '--webapp', + help='Location of web app (required)') + parser.add_option('-u', '--user', + help=('Prefix cron with this user. ' + 'Only define for cron.d style crontabs.')) + parser.add_option('-p', '--python', default='/usr/bin/python2.6', + help='Python interpreter to use.') + + (opts, args) = parser.parse_args() + + if not opts.webapp: + parser.error('-w must be defined') + + ctx = {'django': 'cd %s; %s manage.py' % (opts.webapp, opts.python)} + ctx['cron'] = '%s cron' % ctx['django'] + + if opts.user: + for k, v in ctx.iteritems(): + ctx[k] = '%s %s' % (opts.user, v) + + # Needs to stay below the opts.user injection. + ctx['python'] = opts.python + ctx['header'] = HEADER + + print Template(TEMPLATE).render(**ctx) + + +if __name__ == '__main__': + main()