2004-12-24 01:59:39 +08:00
|
|
|
#!/bin/sh
|
|
|
|
##
|
2007-02-15 06:25:02 +08:00
|
|
|
# Copyright by The HDF Group.
|
|
|
|
# Copyright by the Board of Trustees of the University of Illinois.
|
|
|
|
# All rights reserved.
|
|
|
|
#
|
|
|
|
# This file is part of HDF5. The full HDF5 copyright notice, including
|
|
|
|
# terms governing use, modification, and redistribution, is contained in
|
|
|
|
# the files COPYING and Copyright.html. COPYING can be found at the root
|
|
|
|
# of the source code distribution tree; Copyright.html can be found at the
|
|
|
|
# root level of an installed copy of the electronic HDF5 document set and
|
|
|
|
# is linked from the top-level documents page. It can also be found at
|
|
|
|
# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have
|
|
|
|
# access to either file, you may request a copy from help@hdfgroup.org.
|
2004-12-24 01:59:39 +08:00
|
|
|
##
|
|
|
|
# As a time keeper of the remote daily test process launched by runtest.
|
|
|
|
# It sleeps for a certain time and then wakes up to hangup those processes
|
|
|
|
# that are still around, assuming they have run too long.
|
|
|
|
#
|
|
|
|
# Programmer: Albert Cheng
|
|
|
|
# Created Date: 2004/12/23
|
|
|
|
|
|
|
|
# variable initialization
|
2004-12-26 01:09:03 +08:00
|
|
|
waitminutes=300 # default to 5 hours == 300 minutes
|
2004-12-24 01:59:39 +08:00
|
|
|
debugtimelimit=
|
|
|
|
debugflag= # no debug
|
|
|
|
|
|
|
|
# Function definitions
|
|
|
|
#
|
|
|
|
# PRINTMSG
|
|
|
|
# Print a one line message left justified in a field of 70 characters
|
|
|
|
# without newline. More output for this line later.
|
|
|
|
#
|
|
|
|
PRINTMSG() {
|
|
|
|
SPACES=" "
|
|
|
|
echo "$* $SPACES" | cut -c1-70 | tr -d '\012'
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
USAGE()
|
|
|
|
{
|
|
|
|
echo "Usage: %0 [-h] [-debug] [<time-limit>]"
|
2004-12-26 01:09:03 +08:00
|
|
|
echo " Run timekeeper with <time-limit> minutes, default is $waitminutes."
|
2005-05-29 04:58:30 +08:00
|
|
|
echo " If <time-limit> is in the form of HH:MM, it means wait till then."
|
2004-12-24 01:59:39 +08:00
|
|
|
echo " -h print this help page"
|
|
|
|
echo " -debug run debug mode"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ParseOption()
|
|
|
|
{
|
|
|
|
if [ $# -gt 0 -a "$1" = -h ]; then
|
|
|
|
shift
|
|
|
|
USAGE
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
if [ $# -gt 0 -a "$1" = -debug ]; then
|
|
|
|
shift
|
|
|
|
debugflag=yes
|
2004-12-26 01:09:03 +08:00
|
|
|
waitminutes=1 # use shorter time for debug
|
2004-12-24 01:59:39 +08:00
|
|
|
fi
|
|
|
|
if [ $# -gt 0 ]; then
|
2005-05-29 04:58:30 +08:00
|
|
|
targettime=$1
|
2004-12-24 01:59:39 +08:00
|
|
|
shift
|
2005-05-29 04:58:30 +08:00
|
|
|
|
|
|
|
# find out it is minutes to wait or HH:MM to wake up
|
|
|
|
case $targettime in
|
|
|
|
*:*) # HH:MM
|
|
|
|
currenttime=`date +%H:%M`
|
|
|
|
currenthour=`echo $currenttime | cut -f1 -d:`
|
|
|
|
currentminute=`echo $currenttime | cut -f2 -d:`
|
|
|
|
targethour=`echo $targettime | cut -f1 -d:`
|
|
|
|
targetminute=`echo $targettime | cut -f2 -d:`
|
|
|
|
waitminutes=`expr \( $targethour - $currenthour \) \* 60 + $targetminute - $currentminute`
|
|
|
|
if test $waitminutes -le 0; then
|
|
|
|
# target time is in tomorrow, add 1 day of minutes
|
|
|
|
waitminutes=`expr 24 \* 60 + $waitminutes`
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
waitminutes=$targettime
|
|
|
|
;;
|
|
|
|
esac
|
2004-12-24 01:59:39 +08:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Main body
|
2004-12-26 01:09:03 +08:00
|
|
|
echo "Timekeeper started at `date`"
|
2004-12-24 01:59:39 +08:00
|
|
|
ParseOption $*
|
2004-12-26 01:09:03 +08:00
|
|
|
waitperiod=`expr $waitminutes \* 60` # convert to seconds
|
2004-12-24 01:59:39 +08:00
|
|
|
|
|
|
|
if [ -z "$debugflag" ]; then
|
|
|
|
# normal time keeping mode
|
|
|
|
# sleep first
|
2004-12-26 01:09:03 +08:00
|
|
|
echo Timekeeper sleeping for $waitperiod seconds
|
2004-12-24 01:59:39 +08:00
|
|
|
sleep $waitperiod
|
|
|
|
# Look for any processes still around
|
2004-12-26 01:09:03 +08:00
|
|
|
echo "Timekeeper woke up at `date`, looking for processes to terminate..."
|
2004-12-24 01:59:39 +08:00
|
|
|
for x in PID.* ; do
|
|
|
|
if [ -f $x ]; then
|
|
|
|
pid=`cat $x`
|
2004-12-26 01:09:03 +08:00
|
|
|
# check if process is still around
|
2005-09-18 09:41:57 +08:00
|
|
|
if test X$pid \!= X && ps -p $pid > /dev/null; then
|
2004-12-26 01:09:03 +08:00
|
|
|
echo "terminating process $x ($pid)"
|
|
|
|
kill -HUP $pid
|
2005-11-03 06:54:33 +08:00
|
|
|
echo "Remote shell command ended. But some processes might still be"
|
|
|
|
echo "running in the remote machine. Login there to verify."
|
2004-12-26 01:09:03 +08:00
|
|
|
fi
|
2004-12-24 01:59:39 +08:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
else
|
|
|
|
# Debug mode. Launch two rsh process, one ends before, the other after
|
|
|
|
# waitperiod. Must launch timekeeper from a subshell, else the debug
|
|
|
|
# will wait for it too.
|
|
|
|
myhostname=`hostname`
|
2004-12-26 01:09:03 +08:00
|
|
|
( $0 $waitminutes &)
|
|
|
|
debugtimelimit=`expr $waitperiod - 10`
|
2004-12-24 01:59:39 +08:00
|
|
|
echo rsh $myhostname sleep $debugtimelimit
|
|
|
|
rsh $myhostname sleep $debugtimelimit &
|
|
|
|
echo $! > PID.before
|
2004-12-26 01:09:03 +08:00
|
|
|
debugtimelimit=`expr $waitperiod + 10`
|
2004-12-24 01:59:39 +08:00
|
|
|
echo rsh $myhostname sleep $debugtimelimit
|
|
|
|
rsh $myhostname sleep $debugtimelimit &
|
|
|
|
echo $! > PID.after
|
|
|
|
|
|
|
|
wait
|
|
|
|
rm PID.before PID.after
|
|
|
|
fi
|
|
|
|
|
2004-12-26 01:09:03 +08:00
|
|
|
echo "Timekeeper ended at `date`"
|