我正在使用PM2在后台运行Python程序,如此
pm2 start helloworld.py
它完美无缺。但是,在helloworld.py
中,我有几个用作日志的打印语句。例如,当网络请求进入或者数据库值更新时。当我像这样运行helloworld.py
时:
python3 helloworld.py
所有这些打印语句都可见,我可以调试我的应用程序。但是,在运行时
pm2 logs helloworld
这些印刷语句都没有显示出来。
答案 0 :(得分:12)
这个问题已经有几个月了,所以也许你刚才想到了这个问题,但当我遇到同样的问题时,这是谷歌热门点击之一,所以我想我会添加我发现的内容。
似乎这是python缓冲sys.stdout的问题。在某些平台/实例中,当调用pm2或nohup时,sys.stdout流可能不会被刷新,直到进程退出。传递" -u" python解释器的参数阻止它缓冲sys.stdout。在pm2的process.json中,我添加了" interpreter_args":" -u"我现在正常登录日志。
答案 1 :(得分:-1)
检查文件夹#HOME / .pm2 / logs
例如,请参阅此处的文件夹结构部分: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
tail -f logs/*.log
更新: 要清楚,使用配置文件适用于python脚本。只需创建一个json配置文件,该文件指定您的脚本以及您希望输出的位置。例如
{
"apps": [
{
"name": "Test Python",
"script": "test.py",
"out_file": "test.out.log",
}
]
}
然后运行它 pm2启动test.json 在结果中查找进程ID。使用此进程ID可以停止进程并查看日志文件的位置。例如。 pm2显示3