#!/usr/bin/env python # # grsrun: this file is part of the GRS suite # Copyright (C) 2015 Anthony G. Basile # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . 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 gnu_getopt, GetoptError def usage(rc=1): use = """ 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(use) sys.exit(rc) def main(): try: opts, x = gnu_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()