2016-06-22 16 views
2

ich PM2 bin mit einem Python-Programm im Hintergrund laufen zu lassen, wie soPM2 loggt nicht Python3 print-Anweisungen

pm2 start helloworld.py

und es funktioniert perfekt in Ordnung. Innerhalb von helloworld.py habe ich jedoch mehrere Druckanweisungen, die als Protokolle dienen. Zum Beispiel, wenn eine Netzwerkanforderung eingeht oder wenn ein Datenbankwert aktualisiert wird. Wenn ich laufen helloworld.py wie so:

python3 helloworld.py

all diese Druck Aussagen sind sichtbar, und ich kann meine Anwendung debuggen. Wenn jedoch

pm2 logs helloworld

keine dieser Druck Anweisungen ausführen angezeigt.

Antwort

7

Diese Frage ist ein paar Monate alt, vielleicht Sie haben das vor einiger Zeit herausgefunden, aber es war einer der besten Google-Hits, als ich das gleiche Problem hatte, also dachte ich, ich würde hinzufügen, was ich gefunden habe.

Scheint, es ist ein Problem mit wie Python sys.stdout puffert. Bei einigen Plattformen/Instanzen wird der sys.stdout-Stream bei Aufruf von "pm2" oder "nohup" möglicherweise erst gelöscht, wenn der Prozess beendet wird. Wenn das Argument "-u" an den Python-Interpreter übergeben wird, wird die sys.stdout nicht mehr gepuffert. In der process.json für pm2 habe ich "interpreter_args": "-u" hinzugefügt und ich bekomme jetzt normal Logs.

+0

Ich konnte 'interpreter_args' nicht als' pm22'-Befehlszeilenoption verwenden. Also habe ich ein Bash-Skript erstellt, das 'python -u myscript.py' und' pm2 startet' dieses Bash-Skript aufruft. – ubershmekel

0

Überprüfen Sie den Ordner # HOME/.pm2/logs

zum Beispiel finden Sie in der Ordnerstruktur Abschnitt hier: http://pm2.keymetrics.io/docs/usage/quick-start/

Sehen Sie sich auch eine Konfigurationsdatei mit einem expliziten Protokollordner verwenden, um Ihre Skripte relativ ist. (Dieser Ordner Hinweis vorhanden sein muss, bevor PM2 es verwenden können.) Siehe http://pm2.keymetrics.io/docs/usage/application-declaration/

{ 
"apps": [ 
    { 
     "script": "app/server.js", 
     "log_date_format": "YYYY-MM-DD HH:mm Z", 
     "error_file": "logs/server.web.error.log", 
     "out_file": "logs/server.web.out.log", 
    ... 

Nizza Art und Weise dieser Protokolldateien zu folgen Schwanz läuft

tail -f logs/*.log 
+0

Ihr Beispiel verweist auf ein Node-Projekt, während es sich um Python handelt. –