Alert after long running shell script

bashnotifications

When I have wait for slow commands (operations on large databases for example), I start doing something else and often don't notice for a long time that it has finished, wasting valuable time. I am looking for a way for the shell to alert me (by which I mean, run some custom command which I can determine) when a command which has been running for more than X seconds has finished and I got back the prompt.

I am using Bash, but solutions for other shells would be interesting as well.

Best Answer

This script, if put in your .bashrc, will execute any command you like whenever the prompt returns after a long time executing a command - customize the "long time" (after the -gt) in seconds, and within the curly braces on the same line you can execute whichever commands you like. You could even send yourself an email with the Host on which this occured and the last executed command and its status code.

beep_if_long_time_past() {
    LAST_COMMAND_DURATION=$(($(date +%s) - ${LAST_COMMAND_TIME}))
    [[ ${LAST_COMMAND_DURATION} -gt 60 ]] && { echo "Took long, didn't it?" ; notify-send "I'm done after ${LAST_COMMAND_DURATION} seconds!"; }
    export LAST_COMMAND_TIME=
}

export PROMPT_COMMAND=beep_if_long_time_past
trap '[ -z ${LAST_COMMAND_TIME} ] && export LAST_COMMAND_TIME=$(date +%s)' DEBUG
Related Question