por causa da maneira como meu hoster faz as coisas, tenho que usar um sistema para serviços.
Este serviço possui um arquivo de execução que ele executa e canaliza para um segundo arquivo de execução. Mas eu uso um pacote (dado) python que registra no stderr em vez de stdout e não consigo fazer o que eu quero.
Então, eu 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 é canalizado para a execução do sistema de log:
#!/bin/sh
exec multilog t ./main
Mas o pipe não conecta o stderr (como esperado). Então, depois de pesquisar no Google, acrescentei um redirecionamento à 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 pythons print) são registradas conforme o esperado. A saída stderr não está registrada.
Se eu redirecionar meu runcript modificado para dois arquivos, isso mostra que não há redirecionamento (o stderr ainda está no stderr). Como preciso modificar meu redirecionamento para funcionar?
dup2()
no código. Alguma idéia para onde está indo a saída stderr ? Outro pensamento: talvez o arquivo de execução do seu hoster esteja redirecionando o stderr dessa maneira antes de iniciar seu código.
import sys; print("Hello, stderr", file=sys.stderr)
para ter certeza.
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
e dê uma olhada nesses arquivos de log.
exec ... 2>&1
de fato junta erro padrão à saída padrão. Então, outra coisa está errada.