def get_boot_cron(ignored_params, extra=""): '''Turn current python script into a crontab reboot entry''' job_args = sanitize(sys.argv, ignored_params) job = " ".join(job_args) out_fname = get_outfname() short_job = " ".join([common.get_cmd()] + job_args[1:]) msg = "Job '%s' will write output to '%s'" % (short_job, out_fname) sys.stderr.write("%s %d seconds after reboot.\n" % (msg, DELAY)) # Create sleep and wall commands which will countdown DELAY seconds # before executing the job cmds = ["sleep %d" % DELAY_INTERVAL] delay_rem = DELAY - DELAY_INTERVAL while delay_rem > 0: wmsg = "Restarting experiments in %d seconds. %s" % (delay_rem, extra) cmds += [wall(wmsg)] cmds += ["sleep %d" % min(DELAY_INTERVAL, delay_rem)] delay_rem -= DELAY_INTERVAL delay_cmd = ";".join(cmds) # Create command which will only execute if the same kernel is running kern = common.kernel() fail_wall = wall("Need matching kernel '%s' to run!" % kern) run_cmd = "echo '%s' | grep -q `uname -r` && %s && %s && %s >> %s 2>>%s || %s" %\ (kern, wall(msg), wall("Starting..."), job, out_fname, out_fname, fail_wall) return "@reboot cd %s; %s; %s;" % (os.getcwd(), delay_cmd, run_cmd)
def verify_environment(exp_params): '''Raise an exception if the current system doesn't match that required by @exp_params.''' if exp_params.kernel and not re.match(exp_params.kernel, com.kernel()): raise InvalidKernel(exp_params.kernel) if exp_params.config_options: results = [] for param, wanted in exp_params.config_options.iteritems(): try: actual = com.get_config_option(param) except IOError: actual = None if not str(wanted) == str(actual): results += [ConfigResult(param, wanted, actual)] if results: raise InvalidConfig(results)
def get_boot_cron(ignored_params, extra=""): """Turn current python script into a crontab reboot entry""" job_args = sanitize(sys.argv, ignored_params) job = " ".join(job_args) out_fname = get_outfname() short_job = " ".join([common.get_cmd()] + job_args[1:]) msg = "Job '%s' will write output to '%s'" % (short_job, out_fname) sys.stderr.write("%s %d seconds after reboot.\n" % (msg, DELAY)) # Create sleep and wall commands which will countdown DELAY seconds # before executing the job cmds = ["sleep %d" % DELAY_INTERVAL] delay_rem = DELAY - DELAY_INTERVAL while delay_rem > 0: wmsg = "Restarting experiments in %d seconds. %s" % (delay_rem, extra) cmds += [wall(wmsg)] cmds += ["sleep %d" % min(DELAY_INTERVAL, delay_rem)] delay_rem -= DELAY_INTERVAL delay_cmd = ";".join(cmds) # Create command which will only execute if the same kernel is running kern = common.kernel() fail_wall = wall("Need matching kernel '%s' to run!" % kern) run_cmd = "echo '%s' | grep -q `uname -r` && %s && %s && %s >> %s 2>>%s || %s" % ( kern, wall(msg), wall("Starting..."), job, out_fname, out_fname, fail_wall, ) return "@reboot cd %s; %s; %s;" % (os.getcwd(), delay_cmd, run_cmd)