Piping a saída de um script bash após redirecionar stderr [closed]

9

por causa do jeito que meu hoster faz as coisas, eu tenho que usar um sistema para serviços.

Este serviço tem um arquivo de execução que ele executa e canaliza para um segundo arquivo de execução. Mas eu uso um pacote python (dado) que loga no stderr ao invés do stdout e não consigo fazer o que eu quero.

Portanto, tenho um script de execução para o meu serviço:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

que é enviado para a execução do sistema de registro:

#!/bin/sh
exec multilog t ./main

Mas o pipe não conecta o stderr (como esperado). Então, depois do google eu acrescentei um redirecionamento para minha execução:

#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1

Mas isso não resolve o meu problema: Minhas próprias saídas (para stdout usando impressão de pitões) são registradas como esperado. A saída stderr não está registrada.

Se eu redirecionar minha runcript modificada para dois arquivos, isso mostra que não há redirecionamento (stderr ainda está em stderr). Como preciso modificar meu redirecionamento para o trabalho?

    
por xavor 17.06.2016 / 19:07

1 resposta

0

Por favor, tente:

#!/usr/bin/env bash
exec 2>&1
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py

ie: exec 2>&1 em uma linha separada, dizendo para redirecionar stderr para a mesma coisa que o stdout vai para (seu terminal? ou mail se estiver em um crontab?), seguido pelo cd & exec para substituir o processo existente pelo python3.2. Note que mudei para bash em vez de sh, para uma menor portabilidade, mas geralmente uma confiabilidade muito melhor. Se isso funcionar, grandes pessoas, se não algumas mais bem informadas, intervirão. (Eu não tenho tempo para fazer pesquisas agora)

    
por 13.07.2017 / 15:14