Como obter o nome do programa que produziu um erro de IO redirecionado para um LOG em um comando nohup?

1

Eu tenho um programa que executa outros programas em segundo plano. O programa principal seria o programA, e os programas executados pelo principal seriam o program1a, program1b e program1c.

Eu preciso que os programas continuem a execução, não importa se a conexão do shell foi perdida, então estou usando o comando nohup .

No entanto, cada programa tem seu próprio arquivo de log, assim:

programA - > logfileA.txt
program1a - > logfile1a.txt
program1b - > logfile1b.txt
program1c - > logfile1c.txt

Quando ocorre um erro em um dos programas filhos, a mensagem de erro é exibida no arquivo LOG correspondente ao programa principal.

Exemplos:

  1. O programA é invocado de outra rotina .-

    nohup nice -10 programA 2>&1 > logfileA.txt
    
  2. Dentro do programaA invoca os outros 3 programas .-

    nohup nice -10 program1a 2>&1 > logfile1a.txt
    nohup nice -10 program1b 2>&1 > logfile1b.txt
    nohup nice -10 program1c 2>&1 > logfile1c.txt
    

Quando ocorre um erro, ele é exibido ou exibido em logfileA.txt , em vez de ser exibido em logfile1a.txt ou logfile1b.txt ou logfile1c.txt .

Como posso saber qual programa produziu o erro que é exibido no arquivo de log do programa principal?

    
por LuisE 01.02.2013 / 23:07

1 resposta

1

Você provavelmente só precisa trocar a ordem na qual você redireciona:

nohup nice -10 program1a  > logfile1a.txt 2>&1
nohup nice -10 program1b  > logfile1b.txt 2>&1
nohup nice -10 program1c  > logfile1c.txt 2>&1

o significado de 2>&1 é "duplicado fd 2 de fd 1", isso acontece antes do redirecionamento de fd 1 via ">" no exemplo que você deu.

Veja também: Por que redirecionar STDERR para / dev / null é feito dessa maneira?

    
por 02.02.2013 / 01:14