#!/usr/bin/env python import os import re import signal import sys import time from grs import CONST from grs import Execute from grs import Interpret from getopt import getopt, GetoptError def usage(rc=1): usage = """ usage: grsrun [-m|-u|-h|-s ] flags: Release run. Do every step in build script. : -u Update run. Do only '+' steps. : -m Mock run. Log what would be done. : -s . Only run for GRS system . : -h Print this help file. """ print(usage) sys.exit(rc) def main(): try: opts, x = getopt(sys.argv[1:], 'mus:h') except GetoptError as e: usage() mock_run = False update_run = False grsname = None for o, a in opts: if o == '-h': usage(0) elif o == '-m': mock_run = True elif o == '-u': update_run = True elif o == '-s': grsname = a os.makedirs(CONST.GRS_CGROUPDIR, mode=0o555, exist_ok=True) if not os.path.ismount(CONST.GRS_CGROUPDIR): cmd = 'mount -t cgroup -o none,name=grs grs %s' % CONST.GRS_CGROUPDIR Execute(cmd) count = 0 for name in CONST.names: if grsname: if name != grsname: count = count + 1 continue if not os.fork(): subcgroup = 'run-%s' % name subcgroupdir = os.path.join(CONST.GRS_CGROUPDIR, subcgroup) os.makedirs(subcgroupdir, exist_ok=True) cmd = 'cgclassify -g name=%s:/%s %d' % (CONST.GRS_CGROUP, subcgroup, os.getpid()) Execute(cmd) mr = Interpret(CONST.pidfiles[count], run_number=count, subcgroupdir=subcgroupdir, \ mock_run=mock_run, update_run=update_run) mr.start() sys.exit(0) count = count + 1 if __name__ == '__main__': main()