Setupexp was written to automatically run network experiments in the DiRT lab. You'll probably want to run setupnet before launching a set of experiments.
# # Author: Mark Parris # Created: Sometime before Feb. 14, 1999 # # Change Log: # # This program reads in an experiment script and generates a set of # scripts in the specified directory which will run the commands at # the the specified times on the specified machines. # # Syntax notes: # # Note that this is a perl script that proesses other files which are # just in an "experiment scripting" language that I invented. As such # the syntax is NOT like PERL. %{} is NOT an associative array. # @include is not an array named include. Instead %{} is how I delimit # a reference to a variable so %{bob} is a reference to the variable # named "bob". @include is just the keyword that indicates that # the file specified should be included here. %{time}, $host, and %{DIR} # also have special uses described below as does "TIME=" ####################################################################### # VARIABLES ####################################################################### # A configuration file can include variable definitions of the form # var=value # # Any subsequent reference to %{var} will have value substituted in. # # These definitions can be permanently overriden on the command line # with the option -var VAR=value. Any attempts to set the variable # in the script will be ignored (with an warning message). # ####################################################################### # Special variables ####################################################################### # # TIME=, $host, %{time}, %{DIR} are reserved and defined as specified # in appropriate sections below. # # HOMEDIR is also required to be defined. It will be used as the # location to put the scripts and their output files in on the remote # machines. ####################################################################### # COMMANDS: ####################################################################### # commands take the form of: # hostname_list: command # # the specified command is put into the scripts for each of the # machines specified in hostname_list. # # hostname_list is a list of machine names separated by commas like: # howard138,lovey138,speedy138,petunia138: %{tmodel} %{tmodel_config} >& %{tmodel.out} # # tmodel, tmodel_config, and tmodel.out would be set to the full path # names of those programs and files. ####################################################################### # TIME= ####################################################################### # the TIME= command sets the time at which subsequent commands # execute. TIME can be set to an absolute time or an expression, # usually relative to the previous time (%{time}, see below). # This time is used to determine how long the script should sleep between # # The commands must be ordered so that time is advancing through the # file. Going backward in time results in an error. # # NOTE: Most commands should include the '&' background character and # be terminated with a 'kill program' (e.g. end) at the appointed # time. The time command is a bit misleading in that it simply # determines the amount of time to sleep between subsequent commands # on the assumption that all commands take approximately zero time to # run (thus the need to use background jobs) and subsequent kills. # # %{time} is a special variable that matches the last value which # TIME was set to in the script. It can be used to make the next time # an offset of the previous time (or to checkpoint specific times) # # $host is a special word in the file which is replaced with the # machine name when it is put into a script. ####################################################################### # DONE ####################################################################### # # the DONE keyword specifies that all that follows should be inserted # directly (with variable substitutions) into the runrunrun script. # This is usually commands to postprocess data on the local host. # ####################################################################### # @include filename ####################################################################### # the filename is included in the script as if those lines of text # were in the file. Good use of variables (and overriding them) # should combine with this feature to make building different # configurations fairly easy, requiring little duplication of effort ####################################################################### # OPTIONS ####################################################################### # # -h, -f filename, -d debug_level, -dir exp_dir, -var var=value, -decode # # -h - command line help # # -d - set the debugging level to get various extraneous output # # -f filename - the configuration file # # -dir - directory to place scripts in, value of %{DIR} (usually used # as location to collect data into after the run. # # -var var=value - permanent binding of %{var} to "value". Any # assignments of var in the input file are overridden by the # command line option. # # -decode - DON'T generate an experiment.script file. ####################################################################### # GENERATED SCRIPTS ####################################################################### # # runrunrun - # # The main script generated by this tool is the runrunrun script. # This script is run on the "master" machine and it copies scripts to # each of the machines involved in the experiment and launches them, # waits for them to finish, and collects their output and copies it # back to the selected directory. Finally it runs the postprocessing # specified in the "DONE" section of the configuration file. # # run_exp.hostname - # # These are the scripts for each individual machines. The consist of # the list of commands to execute separated by appropriate sleep # commands to delay execution according to the original script. # # experiment.script - # # This is the "translated" script with absolute times and complete # resolved variables. Useful for debugging or reviewing an # experimental setup. Only generated with the -decode option on.