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?
fonte
exec ... 2>&1
de fato junta erro padrão à saída padrão. Então, outra coisa está errada.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.Respostas:
Tente por favor:
ou seja:
exec 2>&1
em uma linha separada, dizendo para redirecionar o stderr para a mesma coisa que o stdout vai (seu terminal? ou o correio se estiver em um crontab?), seguido pelo cd & exec para substituir o processo existente pelo python3.2. Observe que eu mudei para o bash em vez de sh, para uma portabilidade mais baixa, mas geralmente uma confiabilidade muito melhor. Se isso funcionar, ótimo, senão algumas pessoas mais bem informadas irão intervir. (Não tenho tempo para fazer pesquisas neste momento)fonte