a causa del modo in cui il mio hoster fa le cose, devo usare un sistema per i servizi.
Questo servizio ha un file di esecuzione che esegue e convoglia in un secondo file di esecuzione. Ma io uso un pacchetto (dato) di Python che accede a stderr invece di stdout e non riesco a farlo fare quello che voglio.
Quindi ho uno script di esecuzione per il mio servizio:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
che viene convogliato nell'esecuzione del sistema di registrazione:
#!/bin/sh
exec multilog t ./main
Ma la pipe non collega stderr (come previsto). Quindi dopo aver cercato su Google ho aggiunto un reindirizzamento alla mia corsa:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Ma questo non risolve il mio problema: i miei output (su stdout usando pythons print) vengono registrati come previsto. L'output stderr non è registrato.
Se reindirizzo il mio runscript modificato in due file, questo mostra che non c'è reindirizzamento (stderr è ancora su stderr). Come devo modificare il mio reindirizzamento per funzionare?
dup2()
nel codice. Qualche idea su dove stia andando l'output di stderr ? Un altro pensiero: forse il file di esecuzione del tuo hoster sta reindirizzando stderr in questo modo prima di iniziare il tuo codice.
import sys; print("Hello, stderr", file=sys.stderr)
di essere sicuro.
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
e dai un'occhiata a questi file di registro.
exec ... 2>&1
unisce effettivamente l'errore standard allo standard out. Quindi qualcos'altro è sbagliato.