Files
ma/nextflow/validation/await.sh
2026-04-29 23:01:54 +02:00

41 lines
982 B
Bash
Executable File

#!/bin/bash
set -eu
TIMEOUT=3600 # terminate after one hour
KEEPALIVE=480 # time after which print an output to keep alive travis
# launch main command to await
( "$@" | tee stdout.log ) &
pid=$!
# make sure to terminate target command on exit
trap "kill $pid" TERM INT USR1 USR2
# monitor task execution
begin=$(date +%s)
size=0
while kill -0 $pid > /dev/null 2>&1; do
sleep 1
# continue to await if there's a change
# in the stdout file
### BSD current=$(stat -f%z stdout.log)
current=$(stat -c '%s' stdout.log)
if [[ $current != $size ]]; then
size=$current
begin=$(date +%s)
continue
fi
# kill the execution if it's taking too
# much time without producing any output
now=$(date +%s)
delta=$((now-begin))
if ((delta>=$TIMEOUT)); then
echo Taking too long ... killing it!
kill $pid
exit 1
elif ((delta>=$KEEPALIVE)); then
echo "[keep alive]"
fi
done