Alerta após script de shell longo

7

Quando tenho que esperar por comandos lentos (operações em grandes bancos de dados, por exemplo), começo a fazer outra coisa e, muitas vezes, não percebo que acabou, perdendo um tempo valioso. Eu estou procurando um caminho para o shell me alertar (pelo que quero dizer, executar algum comando personalizado que eu possa determinar) quando um comando que está em execução há mais de X segundos terminou e voltei o prompt.

Estou usando o Bash, mas as soluções para outros shells também seriam interessantes.

    
por Tgr 14.09.2012 / 12:55

3 respostas

11

Este script, se colocado no seu .bashrc , executará qualquer comando que você desejar sempre que o prompt retornar após um longo tempo executando um comando - personalize o "longo tempo" (após o -gt ) em segundos e dentro as chaves na mesma linha você pode executar qualquer comando que você gosta. Você pode até mesmo enviar um e-mail com o Host no qual isso ocorreu e o último comando executado e seu código de status.

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
    
por 14.09.2012 / 15:01
6
slowcommand; echo -e "\a"

Funciona, mas é feio e inconveniente anexar o comando de notificação manualmente a cada vez; Também é fácil esquecer. (Uma notificação pode ser anexada a um processo já em execução com wait como esta resposta explica , mas isso é ainda mais feio. )

    
por 14.09.2012 / 12:55
2

Normalmente, uso uma notificação pop-up, xmessage costuma estar disponível:

slowcommand; xmessage -center 'Job done!'

Ou adicione um lembrete (depende do daemon atd ):

echo 'xmessage -display :0 -center "Check on job"' | at 'now + 10 minutes'
    
por 14.09.2012 / 14:32