en raison de la façon dont mon hébergeur fait les choses, je dois utiliser un système de services.
Ce service a un fichier d'exécution qu'il exécute et redirige vers un deuxième fichier d'exécution. Mais j'utilise un package python (donné) qui se connecte à stderr au lieu de stdout et je ne peux pas le faire faire ce que je veux.
J'ai donc un script d'exécution pour mon service:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py
qui est canalisé dans l'exécution du système de journalisation:
#!/bin/sh
exec multilog t ./main
Mais le tuyau ne connecte pas stderr (comme prévu). Donc, après avoir googlé, j'ai ajouté une redirection à ma course:
#!/bin/sh
cd ~/webapp/PriceList
exec python3.4 ~/webapp/PriceList/src/main.py 2>&1
Mais cela ne résout pas mon problème: mes propres sorties (pour stdout en utilisant l'impression pythons) sont enregistrées comme prévu. La sortie stderr n'est pas enregistrée.
Si je redirige mon script d'exécution modifié dans deux fichiers, cela montre qu'il n'y a pas de redirection (stderr est toujours sur stderr). Comment dois-je modifier ma redirection pour fonctionner?
dup2()
dans le code. Toute idée où la sortie stderr est va? Une autre pensée: peut-être que le fichier run de votre hébergeur redirige stderr de cette façon avant de démarrer votre code.
import sys; print("Hello, stderr", file=sys.stderr)
pour être sûr.
exec python3.4 ~/webapp/PriceList/src/main.py > out.log 2> err.log
et jetez un œil à ces fichiers journaux.
exec ... 2>&1
rejoint en effet l'erreur standard en sortie standard. Donc, quelque chose d'autre ne va pas.