2016-06-22 29 views
2

我使用PM2在後臺運行一個Python程序,像這樣PM2不記錄

pm2 start helloworld.py

Python3打印報表和它完美的罰款。但是,在helloworld.py中,我有幾個用作日誌的打印語句。例如,當網絡請求進入或數據庫值更新時。當我運行helloworld.py像這樣:

python3 helloworld.py

所有這些打印語句是可見的,我可以調試應用程序。然而,運行的時候

pm2 logs helloworld

沒有這些打印報表的顯示。

回答

7

這個問題是一個幾個月大,所以也許你在前一段時間已經發現了這個問題,但是當我遇到同樣的問題時,它是最受歡迎的谷歌瀏覽器之一,所以我想我會添加我發現的內容。

似乎這是python如何緩衝sys.stdout的問題。在某些平臺/實例中,當被稱爲pm2或nohup時,sys.stdout流可能不會被刷新,直到進程退出。將「-u」參數傳遞給python解釋器會阻止它從緩衝sys.stdout中停止。在pm2的process.json中,我添加了「interpreter_args」:「-u」,現在我正在獲取日誌。

+0

我無法將'interpreter_args'作爲'pm2'命令行選項工作。所以我做了一個bash腳本,它調用'python -u myscript.py'和'pm2 start'ed bash腳本。 – ubershmekel

0

檢查文件夾#HOME/.pm2 /日誌

例如,見這裏的文件夾結構部分:http://pm2.keymetrics.io/docs/usage/quick-start/

也可以考慮使用配置文件,是相對於你的腳本明確的日誌文件夾。 (注意:此文件夾必須存在,PM2可以使用它。)查看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", 
    ... 

尼斯一路跟隨這些日誌文件是運行尾

tail -f logs/*.log 
+0

您的示例引用了一個Node項目,但問題與Python有關。 –