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?
la source
exec ... 2>&1
rejoint en effet l'erreur standard en sortie standard. Donc, quelque chose d'autre ne va pas.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.Réponses:
S'il vous plaît essayez:
c'est-à-dire:
exec 2>&1
sur une ligne distincte, en disant de rediriger stderr vers la même chose que stdout va (votre terminal? ou mail si dans une crontab?), suivi par le cd & exec pour remplacer le processus existant par le processus python3.2. Notez que je suis passé à bash au lieu de sh, pour une portabilité inférieure mais généralement une bien meilleure fiabilité. Si cela fonctionne, très bien, sinon des personnes mieux informées interviendront. (Je n'ai pas le temps de faire des recherches en ce moment)la source