#!/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