daemon de monitoramento de processos do Linux [closed]

1

Freqüentemente, estou emitindo comandos que demoram um pouco. Por exemplo, baixar algo usando um aplicativo de download do console. Se eu quiser ser notado quando o comando terminar, geralmente faço algo assim:

$ <do something>; echo '<do something> has finished' | osd_cat

Então eu posso mudar para outra janela e fazer outra coisa enquanto isso. Quando estiver pronto, serei notado.

Agora, meu problema é que sou preguiçoso . Ah bem. Eu só não quero digitar isso toda vez. Então, pergunto-me se há um daemon que pode assistir a processos em execução e acionar algumas ações quando os processos terminarem.

Gostaria de opções de configuração para poder controlar:

  1. filtrando os processos a serem assistidos (por exemplo, observe os processos que são executados pelo menos por um minuto)

  2. personalizando o comando para executar quando um processo terminar

por Anonymous 23.07.2009 / 18:37

3 respostas

2

Você pode tentar usar o comando "wait" do Bash para escrever um pequeno script de wrapper Algo como:

#!/bin/bash
command=$*

$command &  
wait
osd_cat "$command has finished"

O comando wait faz com que o script pause até que todos os processos filhos tenham retornado um código de saída. Você também pode adicionar um pouco de tempo limite para não esperar muito tempo

    
por 23.07.2009 / 18:51
0

Que tal apenas um script de shell simples que faz o comando longo para você. Talvez algo assim:

#!/bin/sh
# tellme: run a command and tell me when it's done
if [ $# -gt 0 ]; then
    if $*; then
        echo "'$*' has finished" | osd_cat
    else
        echo "'$*' has finished with errors" | osd_cat
    fi
else
    echo "usage: $0 <command>"
fi

Então, você apenas executaria este comando:

tellme <do something>

Com certeza, não é um daemon, então eu não acho que ele irá te ajudar em coisas iniciadas em segundo plano (por exemplo, do cron), mas ele deve fazer o trabalho para comandos interativos.

    
por 23.07.2009 / 19:01
0

Talvez não seja um daemon, mas serve ao mesmo propósito para mim. zsh tem ganchos graváveis executados logo antes e logo após a execução de qualquer comando. Você pode fazê-los medir o tempo de wallclock e executar qualquer ação (aqui: notify-send ) se o último comando executado for longo o suficiente. O seguinte em um trecho do meu ~/.zshrc :

preexec () {
  ZSH_CMD_START_TIME="$(date +%s)"
  ZSH_CMD_NAME="$1"
}
precmd () {
  [[ -n "$ZSH_CMD_NAME" ]] && {
    ZSH_LAST_TIME=$(($(date +%s) - $ZSH_CMD_START_TIME))
    [[ $ZSH_LAST_TIME -gt 60 ]] && [[ -n "$DISPLAY" ]] && { which >/dev/null notify-send } && {
      notify-send --urgency=low --category=zsh --expire-time 1500 "ZSH:" '''"$ZSH_CMD_NAME"'''" took $ZSH_LAST_TIME seconds."
    }
    ZSH_CMD_NAME=
  }
}
    
por 18.04.2016 / 02:55