Here is a simple Python script to trigger an
ir.cron
job from the
command-line system.
I created this to let my customer use his proprietary job scheduler to trigger OpenERP tasks. It was tested on OpenERP 6.1.
1#!/usr/bin/python
2
3import sys
4import traceback
5import xmlrpclib
6from optparse import OptionParser
7from datetime.datetime import now
8
9parser = OptionParser()
10parser.add_option("-d", "--db", dest="db_name", help="OpenERP database name", metavar="DB_NAME", default="openerp")
11parser.add_option("-p", "--password", dest="password", help="OpenERP admin password", metavar="ADMIN_PASSWORD", default="admin")
12parser.add_option("-n", "--name", dest="cron_name", help="OpenERP ir.cron object name", metavar="CRON_NAME")
13
14(options, args) = parser.parse_args()
15
16assert options.cron_name
17
18# Query helpers
19sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
20q = lambda * a: sock.execute(options.db_name, 1, options.password, *a)
21
22try:
23 ir_cron_ids = q('ir.cron', 'search', [('name', '=', options.cron_name)])
24 if not ir_cron_ids:
25 raise "No cron found in OpenERP."
26 for ir_cron in q('ir.cron', 'read', ir_cron_ids, ['model', 'function', 'args']):
27 print "%s, %s - (%s) %s %s%s" % (options.db_name, now().strftime('%Y-%m-%d %H:%M:%S'), ir_cron['id'], ir_cron['model'], ir_cron['function'], ir_cron['args'])
28 q(ir_cron['model'], ir_cron['function'], *eval('tuple(%s)' % (ir_cron['args'] or '')))
29except:
30 traceback.print_exc(file=sys.stdout)
31 sys.exit(8)
32
33sys.exit()