#!/usr/local/scsh/bin/scsh \ -e main -s !# (define (get-load hostname) (with-errno-handler ((errno packet) (else (display (format #f "~a Connect Error\n" hostname) (error-output-port)) #f)) (let ((sock (socket-connect protocol-family/internet socket-type/stream hostname 5000))) (let ((line (read-string 2048 (socket:inport sock)))) (let ((loads (string-tokenize line))) (if (< (length loads) 3) (begin (display (format #f "~a Read Error\n" hostname) (error-output-port)) #f) loads)))))) (define (make-host-list) (define (count i last hlist) (if (= i last) hlist (count (+ i 1) last (cons (format #f "tau-~a" i) hlist)))) (count 1 18 (list))) (define (launch-job command hostname) (display (format #f "Starting ~a on ~a\n" command hostname)) (exec "/usr/local/ssh/bin/ssh" hostname command)) (define (main args) (if (< (length args) 2) (display "usage: jobstart command threshhold\n" (error-output-port)) (let ((host-list (make-host-list)) (command (cadr args)) (thresh (caddr args)) (launched #f)) (call-with-current-continuation (lambda (leave-loop) (for-each (lambda (hostname) (let ((loads (get-load hostname))) (if (and (not (boolean? loads)) (< (string->number (car loads)) (string->number thresh))) (begin (launch-job command hostname) (set! launched #t) (leave-loop))))) host-list))) (if (not launched) (display (format #f "~a not started\n" command))))))