Práticas recomendadas para rastreamento de tarefas / processos e multitarefa

6

Eu executo 10 ou mais comandos diferentes de mais de 10 diretórios diferentes e preciso de um processo melhor para rastrear tudo.

Eu faço muita depuração, e muitas vezes eu preciso trabalhar em vários problemas em paralelo. Eu tenho muitos scripts que levam de 30 a 240 minutos para serem executados, como:

  • criar área de trabalho
  • código de compilação
  • executa código para reproduzir problemas com informações de depuração
  • executar qualificações

Eu me pego fazendo as seguintes perguntas:

  • O que está sendo executado?
  • Por que está funcionando? O que eu estava tentando realizar quando comecei o roteiro?
  • O que foi concluído e quando? Qual foi o código de saída (aprovação / reprovação)?

Atualmente, faço anotações em um arquivo de texto sobre o que eu estava fazendo em cada diretório e verifico manualmente os terminais ou arquivos de log para obter o status de execução de tudo. Parece que deveria haver uma maneira melhor.

    
por Victor Lyuboslavsky 06.06.2013 / 16:01

4 respostas

4

Se o problema é que você está encontrando dificuldades para acompanhar o que está trabalhando enquanto salta de uma tarefa para outra, talvez você queira usar um instrumento como tmux e / ou tela . Estes são servidores de janela de terminal virtual e permitem configurar um terminal dentro deles e nomeá-lo. Isso permite colocar um pouco de contexto em um terminal e manter vários terminais sem ocupar a área de trabalho.

Eu normalmente uso a tela, então estou mais familiarizado com seu fluxo de trabalho, mas em geral eu configuro uma sessão de tela assim:

screen -S appX

Eu então me conecto da seguinte forma:

screen -r appX

Em seguida, no espaço do appX, você pode configurar guias / janelas diferentes para trabalhos relacionados ao appX. Eu poderia configurar um windows chamado compiling enquanto outro poderia ser log, onde eu atalho o arquivo de log para o aplicativo. Eu posso então usar combinações de teclas Ctrl + A + Ctrl + A para mover de uma aba / janela para outra ou você pode dividir seu terminal para que uma delas seja na metade superior do terminal, enquanto a outra está na metade inferior.

    
por 06.06.2013 / 16:57
3

Se você estiver executando comandos semelhantes várias vezes, coloque as partes semelhantes em um script de shell ou em um makefile. Dê o script ou os nomes significativos de destino. Dessa forma, quando você olha o que seus vários terminais estão fazendo, a linha de comando (mais possivelmente o nome do host e o diretório atual) dirá claramente tudo que você precisa saber.

Defina o título do seu terminal para mostrar o diretório atual e o comando em execução de $PROMPT_COMMAND (bash) ou preexec (zsh). Dessa forma, você pode dizer o que está acontecendo diretamente na sua lista de janelas, sem ter que mudar para a janela. Quando o comando terminar, defina o título para o diretório atual e o status de saída do último comando ( $? ).

Registre todos os comandos que produzem saída e verifique se o log inclui uma indicação de sucesso ou falha (se isso não acontecer naturalmente, termine com echo $? ). Este log deve ser incluído no seu script wrapper (veja acima). Dessa forma, você pode olhar para trás e ver o que aconteceu antes. Registre também as datas de início e conclusão, se achar que são úteis.

    
por 07.06.2013 / 02:52
2

Para responder diretamente às perguntas:

  • "O que está sendo executado?" ps afux , pstree e similares podem dar uma boa ideia do que está em execução no momento. Se você nomear seus scripts de maneira razoável, será fácil obter uma visão geral disso. Você também pode nomear sua janela de terminal usando printf "3]0;Window titletee7"
  • "Por que está funcionando? O que eu estava tentando realizar quando comecei o roteiro?" Você pode redirecionar a saída do comando para os arquivos de registro nomeados de acordo com o problema que estiver manipulando (opcionalmente, usando time , se quiser vê-lo durante a execução também).
  • "O que foi concluído e quando? Qual foi o código de saída (aprovação / reprovação)?" Registrando a saída echo $? e %code% no final das tarefas nos mesmos arquivos (ou, melhor ainda, tornando-a parte padrão do script), você pode ter uma boa idéia do que aconteceu no final. / li>
por 06.06.2013 / 16:12
1

Task Spooler é um sistema genérico de gerenciamento de tarefas para Linux.

Permite usar 1 ou mais filas para iniciar comandos. Novos comandos podem ser dependentes da conclusão de comandos anteriores. Você pode usar rótulos para rastrear meta informações em tarefas. Task Spooler também tem notificação por email para tarefas concluídas. Você pode ver todos os comandos em execução e concluídos.

    
por 10.06.2013 / 06:09