1*46439007SCharles.Forsythload std sexprs 2*46439007SCharles.Forsyth 3*46439007SCharles.Forsyth# load a job. result is the new job id. 4*46439007SCharles.Forsythsubfn job { 5*46439007SCharles.Forsyth { 6*46439007SCharles.Forsyth id := "{read} 7*46439007SCharles.Forsyth result=$id 8*46439007SCharles.Forsyth or {echo load ${quote $*} >[1=0]} { 9*46439007SCharles.Forsyth raise 'load failed' 10*46439007SCharles.Forsyth } 11*46439007SCharles.Forsyth } $* <> /n/remote/admin/clone 12*46439007SCharles.Forsyth} 13*46439007SCharles.Forsyth 14*46439007SCharles.Forsyth# load a job. print the new job id. 15*46439007SCharles.Forsythfn job { 16*46439007SCharles.Forsyth echo ${job $*} 17*46439007SCharles.Forsyth} 18*46439007SCharles.Forsyth 19*46439007SCharles.Forsyth# load a job, then start it. 20*46439007SCharles.Forsythfn start { 21*46439007SCharles.Forsyth id := ${job $*} 22*46439007SCharles.Forsyth ctl $id start 23*46439007SCharles.Forsyth echo $id 24*46439007SCharles.Forsyth} 25*46439007SCharles.Forsyth 26*46439007SCharles.Forsyth# send a control message to a job. 27*46439007SCharles.Forsythfn ctl { 28*46439007SCharles.Forsyth if {~ $#* 0 1} { 29*46439007SCharles.Forsyth echo usage: ctl job-id request... >[1=2] 30*46439007SCharles.Forsyth raise usage 31*46439007SCharles.Forsyth } 32*46439007SCharles.Forsyth (id args) := $* 33*46439007SCharles.Forsyth echo ${quote $args} > /n/remote/admin/$id/ctl 34*46439007SCharles.Forsyth} 35*46439007SCharles.Forsyth 36*46439007SCharles.Forsyth# mount the scheduler name space 37*46439007SCharles.Forsythfn mountsched { 38*46439007SCharles.Forsyth configfile := $configfile # stop changes propagating out. 39*46439007SCharles.Forsyth if{no $root}{ 40*46439007SCharles.Forsyth root=/grid/slave 41*46439007SCharles.Forsyth } 42*46439007SCharles.Forsyth opts := () 43*46439007SCharles.Forsyth fsopts := () 44*46439007SCharles.Forsyth schedaddr := () 45*46439007SCharles.Forsyth schedfsaddr := () 46*46439007SCharles.Forsyth readconfig { 47*46439007SCharles.Forsyth if{~ $attr schedaddr}{ 48*46439007SCharles.Forsyth schedaddr=$val 49*46439007SCharles.Forsyth }{~ $attr auth}{ 50*46439007SCharles.Forsyth if{~ $val 0}{ 51*46439007SCharles.Forsyth opts=($opts -A) 52*46439007SCharles.Forsyth } 53*46439007SCharles.Forsyth }{~ $attr keyfile}{ 54*46439007SCharles.Forsyth opts=($opts -k $val) 55*46439007SCharles.Forsyth }{~ $attr schedfsaddr}{ 56*46439007SCharles.Forsyth schedfsaddr=$val 57*46439007SCharles.Forsyth }{~ $attr fsauth}{ 58*46439007SCharles.Forsyth if{~ $val 0}{ 59*46439007SCharles.Forsyth fsopts=($fsopts -A) 60*46439007SCharles.Forsyth } 61*46439007SCharles.Forsyth }{~ $attr fskey fskeyfile}{ # first form is deprecated 62*46439007SCharles.Forsyth fsopts=($opts -k $val) 63*46439007SCharles.Forsyth } 64*46439007SCharles.Forsyth } 65*46439007SCharles.Forsyth if{no $schedaddr}{ 66*46439007SCharles.Forsyth ifs=' 67*46439007SCharles.Forsyth ' 68*46439007SCharles.Forsyth schedaddr=`{cat /grid/slave/schedaddr} 69*46439007SCharles.Forsyth if{no $schedaddr}{ 70*46439007SCharles.Forsyth echo no scheduler address found >[1=2] 71*46439007SCharles.Forsyth raise error 72*46439007SCharles.Forsyth } 73*46439007SCharles.Forsyth } 74*46439007SCharles.Forsyth mount $opts $schedaddr /n/remote 75*46439007SCharles.Forsyth no $schedfsaddr || 76*46439007SCharles.Forsyth mount $fsopts $schedfsaddr /n/gridfs 77*46439007SCharles.Forsyth} 78*46439007SCharles.Forsyth 79*46439007SCharles.Forsyth# print a format(2) file with the given format 80*46439007SCharles.Forsythfn fmtcat { 81*46439007SCharles.Forsyth if {! ~ $#* 2} { 82*46439007SCharles.Forsyth echo usage: fmtread fmt file >[1=2] 83*46439007SCharles.Forsyth raise usage 84*46439007SCharles.Forsyth } 85*46439007SCharles.Forsyth (fmt file) := $* 86*46439007SCharles.Forsyth {echo $fmt >[1=0]; read -o 0; cat} <> $file 87*46439007SCharles.Forsyth} 88*46439007SCharles.Forsyth 89*46439007SCharles.Forsyth# readconfig command. 90*46439007SCharles.Forsyth# on entry $configfile is name of configuration file, or empty for default. 91*46439007SCharles.Forsyth# $root is default root directory. 92*46439007SCharles.Forsyth# run command for each entry in the config file, setting $attr and $val 93*46439007SCharles.Forsyth# to the attribute and the value in the entry. 94*46439007SCharles.Forsythfn readconfig { 95*46439007SCharles.Forsyth (cmd nil) := $* 96*46439007SCharles.Forsyth if{no $configfile}{ 97*46439007SCharles.Forsyth if{ftest -f $root/config}{ 98*46439007SCharles.Forsyth configfile = $root/config 99*46439007SCharles.Forsyth } 100*46439007SCharles.Forsyth } { 101*46439007SCharles.Forsyth if{! ~ $configfile '/*' './*'} { 102*46439007SCharles.Forsyth configfile = $root/$configfile 103*46439007SCharles.Forsyth } 104*46439007SCharles.Forsyth if{! ftest -f $configfile}{ 105*46439007SCharles.Forsyth echo cannot find config file $configfile >[1=2] 106*46439007SCharles.Forsyth raise 'config error' 107*46439007SCharles.Forsyth } 108*46439007SCharles.Forsyth } 109*46439007SCharles.Forsyth if{! no $configfile} { 110*46439007SCharles.Forsyth < $configfile getsexprs { 111*46439007SCharles.Forsyth (attr sval) := ${els $sexp} 112*46439007SCharles.Forsyth if{! ~ $#sval 1}{ 113*46439007SCharles.Forsyth echo bad config line $sexp >[1=2] 114*46439007SCharles.Forsyth raise continue; 115*46439007SCharles.Forsyth } 116*46439007SCharles.Forsyth attr = ${text $attr} 117*46439007SCharles.Forsyth val := ${text $sval} 118*46439007SCharles.Forsyth $cmd 119*46439007SCharles.Forsyth } 120*46439007SCharles.Forsyth } 121*46439007SCharles.Forsyth} 122