#!/bin/bash # Run a command, suppressing output unless it hangs or crashes. TMPFILE=`mktemp` PID=$$ # Print output to avoid travis killing us watchdog() { for i in `seq 5 5 150`; do sleep 300 echo "This command has been running for more than $i minutes..." done echo "Command timed out after 2.5h, dumping logs:" cat $TMPFILE echo "TIMED OUT" kill -SIGKILL $PID } watchdog & 2>/dev/null WATCHDOG_PID=$! time "$@" >$TMPFILE 2>&1 CODE=$? if [ $CODE != 0 ]; then tail -n 2000 $TMPFILE echo "FAILED $CODE" kill $WATCHDOG_PID exit $CODE fi kill $WATCHDOG_PID exit 0