#!/usr/local/bin/perl # # spew-load-stats: really simple script which'll spew out load statistics, # one per second, until it gets a SIGPIPE from the output fd closing. # # This relies on "uptime" to get the load average for us. To use it, add # a line to /etc/services for the service "loadavg" on a high port (eg. 8001), # then add this line to /etc/inetd.conf (Don't forget to kill -1 inetd # afterwards!): # # loadavg stream tcp nowait nobody /home/jmason/adm/spew-load-stats spew-load-stats # # Re-use as you see fit, it's not worth copyrighting! ;) # # --jmason@iona.com, aug '96. $ENV{'PATH'} = '/bin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin'; $ENV{'LD_LIBRARY_PATH'} = '/lib:/usr/lib:/usr/ucblib'; $ENV{'IFS'} = ' '; $NAME = `uname -n || hostname 2>/dev/null`; chop $NAME; @WEEKDAYS = (Sun,Mon,Tue,Wed,Thu,Fri,Sat); $| = 1; while (1) { open (UP, "uptime |") || die "cannot run uptime!\n"; $_ = ; close UP; # 12:09pm up 7 day(s), 2:20, 8 users, load average: 1.36, 1.58, 1.59 / load average: ([\d\.]+), ([\d\.]+), ([\d\.]+)/; $load1 = $1+0; $load5 = $2+0; $load15 = $3+0; @d = localtime(time); # we want something like "09:20 Sat 10/08/96" $date = sprintf ("%02d:%02d %s %02d/%02d/%02d", $d[2], $d[1], $WEEKDAYS[$d[6]], $d[3], $d[4]+1, $d[5]); print "$date\tname=\"$NAME\",", "load1min=$load1,load5mins=$load5,load15mins=$load15\n"; sleep(10); }