runsv não está redirecionando a saída de erro padrão, por quê?

0

De acordo com a página runsv man :

If the directory service/log exists, runsv creates a pipe, redirects service/run's and service/finish's standard output to the pipe, switches to the directory service/log and starts ./run script. The standard input of the log service is redirected to read from the pipe.

Obviamente, runsv apenas redireciona a saída padrão do serviço, mas não o padrão saída de erro, para entrada padrão do svlogd. Minha pergunta é: por quê? Claro que quero para registrar a saída de erro padrão da minha unidade; por que tenho que prestar mais atenção para adicionar exec 2>&1 ao início de cada arquivo de unidade?

Felicidades!

    
por David 27.02.2018 / 13:16

1 resposta

1

Na verdade, você não faz.

runsv tem esse comportamento de svscan nos daemontools originais de Bernstein, que fizeram o mesmo. Quase todo mundo copiou. svscan de Bruce Guenter, do daemontools-encore, Laurent Bercot's s6-svscan de s6 e de Wayne Marshall perpd do perp todos fazem o mesmo.

Até mesmo o svscan de Adam Sampson do freedt conecta apenas a saída padrão, apesar de chamar o descritor de arquivo err no código . ☺

Percebendo com que extensão exec 2>&1 e fdmove -c 2 1 se tornaram a norma e observando que algumas linguagens de programação definem explicitamente um fluxo log padrão que acaba sendo o descritor de arquivo 2 (por exemplo, std::clog in C ++), eu fiz service-manager no conjunto de ferramentas nosh conectar a saída padrão e erro padrão para o pipe quando os serviços de encanamento juntos.

Leitura adicional

por 27.02.2018 / 22:51

Tags